2011-05-18 63 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')

相关问题