2011-05-18 62 views
1

我試圖在DOM中使用DOMDocument遍歷DOM樹。對getElementById/getElementsByTagName的初始調用是成功的,但我不確定如何繼續生成NodeList。PHP DOMDocument在NodeList上調用getElementsByTagName

下面是一個示例HTML文件,我試圖遍歷。

<!DOCTYPE html> 
<html> 
    <div id="container"> 
     <p> Hello </p> 
    </div> 
</html> 

在Javascript中我能鏈DOM遍歷方法,像這樣:

document.getElementById('container').getElementsByTagName('p')[0].innerText 
// returns "Hello" 

但是在PHP中嘗試類似...

<?php 

$document = new DOMDocument(); 
$document->load('test.html'); 

echo $document->getElementById('content')->getElementsByTagName('p')->item(0)->nodeValue . PHP_EOL; 

?> 

...只返回此錯誤:

Fatal error: Call to a member function getElementsByTagName() on a non-object in /Users/liam/foobar on line 6 

我在做些什麼事情不對,或者這只是不支持?

回答

1

您沒有編號爲content的元素 - 它被稱爲container

此外,您不能在任何舊的XML文檔上調用getElementById。它需要具有「一個DTD,它將一個屬性定義爲ID類型」(來自the manual)。告訴DOMDocument文檔是HTML(就像在瀏覽器中隱含地使用Javascript一樣)足以能夠使用該函數。

在這裏,您應該撥打DOMDocument::loadHTMLFile而不是load

+0

輝煌!改成loadHTMLFile(並糾正我的那個愚蠢的錯字)奇妙地工作。 – 2011-05-18 14:52:29

0

在我看來,$document->getElementById('content')是空的,您需要將其更改爲$document->getElementById('container')

相關問題