【发布时间】:2018-11-21 18:38:23
【问题描述】:
我们正在将我们的软件升级到 PHP 7.2.3,我有以下代码 sn-p 在以前的版本中运行良好:
$doc = new DOMDocument();
$doc->loadHTML("<html><body>".($_POST['reportForm_structure'])."</body></html>");
$root = $doc->documentElement->firstChild->firstChild->firstChild;
file_put_contents('D:\testoutput.txt', print_r($root ,true));
foreach($root->childNodes as $child) {
if ($child->nodeName == "ul") {
foreach($child->childNodes as $ulChild) {
$this->loadNodes($ulChild, $this->report);
}
}
}
file_put_contents仅用于错误研究。
我收到以下错误:Invalid argument supplied for foreach()。该消息指的是第一个 foreach 循环所在的代码行。所以数据结构没有正确初始化。我可以看到从 HTML 到 DOMDocument 的转换不再正常工作。当我检查 file_put_contents 的输出时,我可以看到 $root 是一个 DOMText 对象而不是 DOMElement 对象,但是 why? 什么时候将loadHTML的参数直接传给file_put_contents,
file_put_contents('D:\testoutput.txt', print_r("<html><body>".($_POST['reportForm_structure'])."</body></html>", true);
输出看起来像正确的 HTML,这就是为什么我对我不再工作感到困惑。
<html><body><ul class="ltr">
<li class="open last" id="root" rel="root">
<a href="#"><ins> </ins>HeaderText</a>
<ul><li class="open last" id="id1" rel="header"><a href="#"><ins> </ins>Test123</a>
<ul><li class="open leaf last" id="id2" rel="header"><a class="clicked" href="#"><ins> </ins>Test456</a></li></ul></li></ul></li>
有谁知道如何解决这个问题。我在这里的配置中遗漏了什么吗?
【问题讨论】:
-
你为什么不使用 $root = $dom->getElementById("root");获取具有根 id 的元素?
-
你到底想要达到什么目的?
标签: php dom html-parsing domdocument php-extension