【问题标题】:xpath finding absolute path is there any easy way?xpath查找绝对路径有什么简单的方法吗?
【发布时间】:2012-12-23 21:31:12
【问题描述】:

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

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

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

假设我使用:

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

这给了我一个元素。现在我的问题是有一种简单的方法可以找到它的绝对路径。如果不。那么我可能不得不在树上递归。

如果是这样,我如何检查元素是否有父元素?

我知道我可以使用hasChildNodes() 找到孩子,但有没有办法找出是否有父母?或任何其他方式来打破它碰到树顶的递归?

【问题讨论】:

    标签: php html xpath


    【解决方案1】:

    您可能正在寻找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]
    

    【讨论】:

    • 是的,实际上它看起来与您在问题中概述的差不多。还有一点,让我试试。您在此处使用 HTML 文档吗?
    • 我基本上是在拉网页并在上面定位价格。所以我以后可以检查它,基本上任何有价格的页面都可以。我试过了,感觉不错
    • 是的,这个东西是个不错的选择。如果您需要在同一个文档中添加书签,也可以在要添加书签的元素上设置 ID 属性(或者如果已设置,则获取该 ID 值)。
    • javascript 是否有与上述相同的内容?
    • @NetaMeta,这可以在纯 XSLT 中完成。见:stackoverflow.com/questions/4746299/…
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2010-12-24
    相关资源
    最近更新 更多