我在xpath上做错了什么?

时间:2010-08-29 22:06:30

标签: php xpath

的test.html

<html>
    <body>
        <span> hello Joe</span>
        <span> hello Bob</span>
        <span> hello Gundam</span>
        <span> hello Corn</span>
    </body>
</html>

PHP文件

$doc = new DOMDocument();
$doc->loadHTMLFile("test.html");

$xpath = new DOMXPath($doc);

$retrieve_data = $xpath->evaluate("//span");

echo $retrieve_data->item(1);
var_dump($retrieve_data->item(1));
var_dump($retrieve_data);

我正在尝试使用xPath来查找跨度,然后回显它,但似乎我无法回应它。我试着倾倒它以查看是否正确评估,我不确定这个输出是什么意思:

object(DOMElement)#4 (0) { } 
object(DOMNodeList)#7 (0) { }

#4#7是什么意思,括号是什么意思;语法是什么意思?

更新: 这是我尝试echo $retrieve_data;$retrieve_data->item(1);

时遇到的错误
Catchable fatal error: Object of class DOMNodeList could not be converted to string

4 个答案:

答案 0 :(得分:3)

$xpath->evaluate("//span");
如果可能,

返回一个类型化结果,或者包含与给定XPath表达式匹配的所有节点的DOMNodeList。在您的情况下,它返回DOMNodeList,因为您的XPath评估为四个DOMElements,它们是专门的DOMNodes。在使用任何XML时理解Node概念,无论使用何种语言,都至关重要。

echo $retrieve_data->item(1);

无效,因为DOMNodeList::item会在您的案例中返回DOMNode,更具体地说是DOMElement。如果他们没有实现__toString()方法,则不能在PHP中echo任何类型的对象。 DOMElement没有。 DOMNodeList也没有。因此,您会收到无法将对象转换为字符串的致命错误。

要获取DOMElement的值,您可以阅读他们的nodeValuetextContent

我的一些DOM示例:https://stackoverflow.com/search?q=user%3A208809+dom

答案 1 :(得分:2)

如果要在span中输出文本,可以使用textContent属性:

  

echo $ retrieve_data-&gt; item(1) - &gt; textContent;

答案 2 :(得分:1)

如果要输出XML(或HTML),请尝试:

echo $doc->saveXML( $retrieve_data->item(1) );

BTW,DOMNodeList,即您的查询结果,是零基础索引,因此第一项将是0。但也许你已经知道了。

答案 3 :(得分:1)

你的项目是DOMNode对象,echo它的nodeValue属性可能有帮助