如何通过XPath匹配两个CSS类属性值?

时间:2016-05-24 23:05:28

标签: html css xml xpath

我查看了有关如何选择具有多个班级的元素的问题的答案。其中一个解决方案是:

//div[contains(@class, 'class1') and contains(@class, 'class2')]

但如果div元素的类字符串包含class1class2,则会中断。是否有正式的方法来选择具有多个类的标签?这种方式会破裂吗?

1 个答案:

答案 0 :(得分:0)

是的,您的XPath可以匹配不需要的@class值是正确的:

//div[contains(@class, 'class1') and contains(@class, 'class2')]
     

但如果标签的类字符串包含,那么这会破坏   class1或class2

例如,上述XPath会将div元素与以下任何@class属性值匹配:

class="class10 class20"
class="notclass1 notclass2"
class="class1class2"

通常的安全措施是在@class以及目标字符串前加上和附加空格:

//div[    contains(concat(' ', @class, ' '), ' class1 ')
      and contains(concat(' ', @class, ' '), ' class2 ')]

这种改进的XPath不会与上面提到的不期望的变化相匹配。