domDocument 不返回节点信息

domDocument is not returning node information

我正在尝试获取外部页面的 DOM 元素。基于我正在尝试的其他帖子:

$html = htmlentities(file_get_contents('http://www.slate.com'));    
$dom = new domDocument;
$dom->loadHTML($html);
echo "<pre>";
var_dump($dom);
echo "</pre>";

(Html entites 杀死警告,但在其他方面与将其排除在外具有相同的结果)。

根据我读过的内容,这应该 return parent/child 个节点中的各种 DOM 部分。但是上面代码的结果不包含 DOM 个节点,只有一个巨大的 "textContent" 元素,它包含整个页面 HTML.

提前感谢您对我做错的想法。

您应该考虑使用 phpQuery (https://github.com/electrolinux/phpquery)。

您正在寻找

$dom->documentElement

这将 return 一个

DOMNode

对象。

另外:去掉 htmlentities 因为这会弄乱你获取的 HTML 代码。例如:< 将得到 &lt,您的 loadHTML 不会将其解释为 <。看看:Disable warnings when loading non-well-formed HTML by DomDocument (PHP)

虚拟转储:

function dump(DOMNode $node)
{
    echo $node->nodeName;
    if ($node->hasChildNodes())
    {
        echo '<div style="margin-left:20px; border-left:1px solid black; padding-left: 5px;">';
        foreach ($node->childNodes as $childNode)
        {
            dump($childNode);
        }
        echo '</div>';
    }
}

dump($dom->documentElement);

看起来像: