0

我在使用带有 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 的父节点名称。我究竟做错了什么?

4

1 回答 1

2

首先,你的最后一行有一个错字:echo $nodeClimb.nodeName;应该是echo $nodeClimb->nodeName;

但是,您的主要问题是您在一行中发现但在下一行没有发现的问题:XPath 查询返回的不是单个,而是包含该查询的所有匹配DOMNode项的实例。DOMNodeList

因此,正如您选择了列表中的第一个项目来回显 ( echo $nodeFoo->item(0)->nodeValue;),您需要选择一个项目作为父项目 ( $nodeClimb = $nodeFoo->item(0)->parentNode;)。

于 2012-08-25T16:33:39.880 回答