【发布时间】:2016-05-24 23:05:27
【问题描述】:
我查看了有关如何选择具有多个类的元素的问题的答案。解决方案之一是:
//div[contains(@class, 'class1') and contains(@class, 'class2')]
但如果div 元素的类字符串包含class1 或class2,这将中断。是否有选择具有多个类的标签的官方方法?这条路会断吗?
【问题讨论】:
我查看了有关如何选择具有多个类的元素的问题的答案。解决方案之一是:
//div[contains(@class, 'class1') and contains(@class, 'class2')]
但如果div 元素的类字符串包含class1 或class2,这将中断。是否有选择具有多个类的标签的官方方法?这条路会断吗?
【问题讨论】:
是的,您的 XPath 可能匹配不想要的 @class 值是正确的:
//div[contains(@class, 'class1') and contains(@class, 'class2')]但是如果一个标签的类字符串包含 1 类或 2 类
例如,上面的 XPath 将匹配 div 元素与以下任何 @class 属性值:
class="class10 class20"
class="notclass1 notclass2"
class="class1class2"
通常的保护措施是在@class 以及目标字符串之前添加和附加空格:
//div[ contains(concat(' ', @class, ' '), ' class1 ')
and contains(concat(' ', @class, ' '), ' class2 ')]
这种改进后的 XPath 不会匹配上面提到的这种不受欢迎的变化。
【讨论】: