2016-07-08 54 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