2016-07-08 89 views
1

我试图获取外部页面的DOM元素。基于其他帖子,我试图:domDocument没有返回节点信息

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

(html entites杀死警告,但其他方面有相同的结果,因为它离开了)。

根据我读过的内容,这应该返回父/子节点中的各种DOM部件。但上面的代码的结果不包含DOM节点,只是包含整个页面HTML的一个巨大的“textContent”元素。

在此先感谢您对我做错什么的想法。

+0

如果你想sisable警告使用'libxml_use_internal_errors(真)'。你不能在'htmlentities'后加载DomDocument – splash58

回答

1

您正在寻找

$dom->documentElement 

这将返回一个

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); 

它看起来像:

Dummy-Dump

+0

让我到了需要去的地方。谢谢! – daprezjer