在DomXpath中使用parentNode时遇到困难。
<?php
$html = <<<STR
<div id="bar">
<p>item1</p>
<ul>
<li class="foo">item2</li>
<li>item3</li>
<li>item4</li>
</ul>
</div>
STR;
$doc = new DOMDocument;
$doc->loadHTML( $html );
$xpath = new DomXpath($doc);
$nodeFoo = $xpath->query("//*[@id='bar']//*[@class='foo']");
echo $nodeFoo->item(0)->nodeValue;
$nodeClimb = $nodeFoo->parentNode; // causes an error
echo $nodeClimb.nodeName;
?>
我预计最后一行会产生"ul",这是检索到的节点$nodeFoo的父节点名称。我做错了什么?
首先,最后一行有一个拼写错误:echo $nodeClimb.nodeName;
应该是echo $nodeClimb->nodeName;
然而,您的主要问题是您在一行中发现了一些问题,但在下一行中没有发现:XPath查询返回的不是单个DOMNode
,而是包含该查询的所有匹配项的DOMNodeList
实例。
因此,正如您选择了列表中要回显的第一个项目(echo $nodeFoo->item(0)->nodeValue;
)一样,您需要选择一个项目来指定为父项($nodeClimb = $nodeFoo->item(0)->parentNode;
)。