XPath将类和其他属性值结合在一起?

时间:2018-08-29 14:22:25

标签: html xml xpath

PART A

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

例如,元素<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-style icon-large'...

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

PART B

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

PART C

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

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

2 个答案:

答案 0 :(得分:1)

  

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

是的

  

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

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

  

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

是否进行相等匹配并不重要。有多种解决方法,请参见this answer

答案 1 :(得分:1)

此XPath阐明了由三部分组成的问题的所有概念:

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

注意:

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