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 代码。例如:<
将得到 <
,您的 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);
看起来像:
我正在尝试获取外部页面的 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 代码。例如:<
将得到 <
,您的 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);
看起来像: