不能在PHP中使用带有DomXpath的parentNode

时间:2012-08-25 16:07:15

标签: php dom xpath domdocument

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

1 个答案:

答案 0 :(得分:2)

首先,您的最后一行有拼写错误:echo $nodeClimb.nodeName;应为echo $nodeClimb->nodeName;

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

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