xpath найти абсолютный путь есть ли простой способ?

Я попытался найти способ «закладок» элемента на странице, чтобы потом проверить его. все, что я пробовал до сих пор, привело меня к какой-то проблеме, поэтому я пришел к выводу, что найти абсолютный путь может быть единственным способом.

Я новичок в xpath или DOMdocument вообще, поэтому у меня может быть неправильное имя, но по абсолютному пути я имею в виду что-то вроде:

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

скажем, я использую:

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

Это дало мне элемент. теперь мой вопрос – это простой способ найти абсолютный путь. если не. то мне, вероятно, придется рекурсивно пройтись по дереву.

если да, то как я могу проверить, имеет ли элемент родительский элемент?

Я знаю, что могу использовать hasChildNodes() чтобы найти ребенка, но есть ли способ узнать, есть ли родитель? или любой другой способ разбить рекурсию, он попал в вершину дерева?

Related of "xpath найти абсолютный путь есть ли простой способ?"

Возможно, вы ищете DOMNode::getNodePath() . Быстрый пример:

 $xml = <<<XML <blaah1 name="whatever"> <gender name="male"> <example1 baseurl="male/86644/"> <xu="lol.png"/> <xu="haha.png"/> <xu="name.png"/> </example1> <example2 baseurl="male/27827/"> <xu="page.png"/> <xu="examp.png"/> <xu="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]