0

親ノードを DomXpath で使用するのに問題があります。

<?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;
?>

最後の行には、取得したノード $nodeFoo の親ノード名である「ul」が返されると予想していました。私は何を間違っていますか?

4

1 に答える 1

2

まず、最後の行にタイプミスがあります: echo $nodeClimb.nodeName;should beecho $nodeClimb->nodeName;

ただし、主な問題は、ある行では見つけたものの、次の行では見つけていないものです。XPath クエリは、単一の ではなく、そのクエリのすべての一致を含むDOMNodeのインスタンスを返します。DOMNodeList

したがって、エコーするリストの最初のアイテムを選択したように ( ) echo $nodeFoo->item(0)->nodeValue;、親として割り当てるアイテムを選択する必要があります ( $nodeClimb = $nodeFoo->item(0)->parentNode;)。

于 2012-08-25T16:33:39.880 に答える