php - xpath查找绝对路径有什么简单的方法吗?

标签 php html xpath

我试图找到一种方法来“为页面上的元素添加书签”,以便我稍后能够检查它。到目前为止我尝试过的所有事情都导致我遇到了一些问题,所以我得出的结论是找到绝对路径可能是唯一的方法。

一般来说,我对 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]

关于php - xpath查找绝对路径有什么简单的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14014862/

相关文章:

Java Selenium Webdriver 设置卷?

javascript - 如何使用 Watir 单击具有 Javascript 的链接

php - yii findByAttributes 简单用法

html - float :left even if parent div is too small

java - 尝试使用部署在 WebSphere 中的 Java REST Web 服务。我收到 SSLHandshakeException

c# - 为什么这个Xpath htmlagilitypack选择不起作用

php - 使用 php 和 jquery 解决简单任务的想法

php - Laravel 4 身份验证不适用于子域

php - PL/pgSQL - 运行 PHP 脚本或其他程序

jquery - 将 div 框堆叠成两列。但是当右边的盒子被移除时,它后面的所有盒子应该相应地排列起来