我想写出这个问题的规范答案,因为上面的答案有问题.
我们的问题
CSS Select 器:
.foo
将 Select 任何具有类foo的元素.
How do you do this in XPath?
尽管XPath比CSS更强大,但是XPath doesn't have a native equivalent of a CSS class selector.然而,有一个解决办法.
正确的方法
XPath中的等效 Select 器为:
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
函数normalize-spacego 除前导空格和尾随空格(并且还将空格字符序列替换为单个空格).
(在更一般的意义上)这也相当于CSS Select 器:
*[class~="foo"]
它将匹配任何元素,其class属性值是由空格分隔的值组成的列表,其中一个值正好等于foo.
做这件事的几种明显但错误的方式
XPath Select 器:
//*[@class="foo"]
不行!因为它不会匹配一个有多个类的元素,例如
<div class="foo bar">
如果类名周围有任何额外的空格,它也将不匹配:
<div class=" foo ">
"改进的"XPath Select 器
//*[contains(@class, "foo")]
也不管用!因为它错误地将元素与类foobar匹配,例如
<div class="foobar">
这要归功于这个家伙,他是我在网上找到的最早的解决方案: