【问题标题】:XPath for class and other attribute values together?将 XPath 用于类和其他属性值吗?
【发布时间】:2019-02-04 09:07:45
【问题描述】:

第一部分

我想通过属性值选择一个 HTML 元素。我希望能够匹配所有的属性。

所以一个元素 <a> 具有以下属性,例如:

'href' => "https://twitter.com/JSTOR"
'target' => "_blank"
'class' => "icon-twitter twitter-styling icon-large"
'aria-label' => "Twitter - This link opens in a new window"

是这样的吗: //a[@href='https://twitter.com/JSTOR' AND @target='_blank' AND @class='icon-twitter twitter-styling icon-large' ...

所以如果我有n个属性,我需要n-1个“AND”?

第二部分

另外值得注意的是“类”中的多个值。我可以简单地使用@class='classA classB classC' 还是应该@class='classA' AND @class='classB' AND @class='classC'?

C 部分

最后,对于“类”中的多个值,顺序重要吗?如果标签列出 'classA classB' 并且我们使用 xpath //a[@class='classB classA',它还会匹配吗?

**请注意我需要 XPath 1.0 的答案

【问题讨论】:

    标签: html xml xpath


    【解决方案1】:

    此 XPath 说明了您的三部分问题的所有概念:

    //a[contains(concat(' ',@class,' '), ' classA ')]
       [contains(concat(' ',@class,' '), ' classB ')]
       [contains(concat(' ',@class,' '), ' classC ')]
       [@href='https://twitter.com/JSTOR']
       [@target='_blank']
    

    注意事项:

    • @class 测试阻止 classA 匹配 classAnt
    • 您可以使用and 将条件加入单个谓词而不是复合谓词中。

    【讨论】:

      【解决方案2】:

      所以如果我有n个属性,我需要n-1个“AND”?

      是的。

      我可以简单地拥有@class='classA classB classC'

      可以,但需要完全匹配,包括空格和顺序

      最后,对于“类”中的多个值,顺序重要吗?

      是否进行相等匹配确实很重要。有办法解决这个问题,见this answer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 2013-04-05
        • 1970-01-01
        • 2020-04-22
        • 2017-05-03
        • 1970-01-01
        相关资源
        最近更新 更多