Xpath查找绝对路径有没有什么简单的方法


xpath finding absolute path is there any easy way?

我试图找到一种方法来"书签"一个页面上的元素,所以我以后能够检查它。到目前为止,我所做的一切尝试都使我遇到了一些问题,所以我得出结论,找到绝对路径可能是唯一的方法。

我是xpath或DOMdocument的新手,所以我可能有错误的命名,但绝对路径我的意思是:

"/html/body/div[1]/div[1]/div[2]/span[2]"

假设我使用:

$element_with_something = $xpath->query('(//*[text()= "something"])');

这给了我一个元素。现在我的问题是,有没有一种简单的方法可以求出它的绝对路径。如果不是。然后我可能就得递归了

如果有,我如何检查一个元素是否有父元素?

我知道我可以使用hasChildNodes()找到孩子,但有没有办法找出是否有父母?或者有其他方法来打破递归吗?

您可能正在寻找DOMNode::getNodePath()。一个简单的例子:

$xml = <<<XML
<blaah1 name="whatever">
    <gender name="male">
        <example1 baseurl="male/86644/">
            <x u="lol.png"/>
            <x u="haha.png"/>
            <x u="name.png"/>
        </example1>
        <example2 baseurl="male/27827/">
            <x u="page.png"/>
            <x u="examp.png"/>
            <x u="bottom.png"/>
        </example2>
    </gender>
</blaah1>
XML;
$doc = new DOMDocument();
$doc->loadXML($xml);
$xp = new DOMXPath($doc);
foreach($xp->query('//node()') as $node ) {
    echo $node->getNodePath(), "'n";
}

输出:

/blaah1
/blaah1/text()[1]
/blaah1/gender
/blaah1/gender/text()[1]
/blaah1/gender/example1
/blaah1/gender/example1/text()[1]
/blaah1/gender/example1/x[1]
/blaah1/gender/example1/text()[2]
/blaah1/gender/example1/x[2]
/blaah1/gender/example1/text()[3]
/blaah1/gender/example1/x[3]
/blaah1/gender/example1/text()[4]
/blaah1/gender/text()[2]
/blaah1/gender/example2
/blaah1/gender/example2/text()[1]
/blaah1/gender/example2/x[1]
/blaah1/gender/example2/text()[2]
/blaah1/gender/example2/x[2]
/blaah1/gender/example2/text()[3]
/blaah1/gender/example2/x[3]
/blaah1/gender/example2/text()[4]
/blaah1/gender/text()[3]
/blaah1/text()[2]
相关文章: