的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
答案 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的值,您可以阅读他们的nodeValue
或textContent
。
我的一些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属性可能有帮助