Php xpath查询:仅检索孙子的值

Php xpath查询:仅检索孙子的值,php,xpath,Php,Xpath,我想在下面的test.html中使用xpath查询只检索一次“Testing” <html> <body> <div class="test1"></div> <div class="test2"> <div><strong>Testing</strong></div> </div> <

我想在下面的test.html中使用xpath查询只检索一次“Testing”

<html>
    <body>
        <div class="test1"></div>
        <div class="test2">
            <div><strong>Testing</strong></div>
        </div>
    </body>
</html>

为什么它甚至在[div]节点中打印“Testing”?我希望它只在[strong]节点中检索“Testing”。

这就是它的工作原理-
nodeValue
父节点的将始终包含其子节点的
nodeValue
s


nodeValue
不太符合您的目标。您应该在其子节点中获取文本节点。请参阅此问题:.

您的XPath
/html/body/div[2]/*
返回
div[2]
的所有后代,包括子节点和孙节点


要仅获取孙子,请使用
/html/body/div[2]/*/*/*

,因为孙子将是
/./.
/*
==任何深度的任何子代。
$uri='test.html';
$doc = new DOMDocument('1.0','utf-8');
$doc->loadHTMLFile($uri);
$xpath= new DOMXPath($doc);
$path="/html/body/div[2]//*"; 
$elements = $xpath->query($path);

if(!is_null($elements)){
    foreach($elements as $element){
        echo '<br>['.$element->nodeName.']';
        $nodes = $element->childNodes;
        foreach($nodes as $node){
            $nodeValue=$node->nodeValue;
            echo $nodeValue;
        }
    }
}
[div] Testing 
[strong] Testing