我想为这个问题写一个规范的答案,因为上面的答案有问题。
我们的问题
该CSS选择器:
.foo
将选择具有foo类的任何元素。
您如何在XPath中做到这一点?
尽管XPath比CSS强大,但是XPath没有CSS类选择器的本地等效项。但是,有一个解决方案。
正确的做法
XPath中的等效选择器是:
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
函数归一化空间,以去除开头和结尾的空白(并且还将空格字符序列替换为单个空格)。
(从更一般的意义上讲)这也等同于CSS选择器:
*[class~="foo"]
它将匹配其类属性值是由空格分隔的值的列表的任何元素,其中一个值等于foo。
几种明显但错误的方法
XPath选择器:
//*[@class="foo"]
不起作用!因为它不匹配具有多个类的元素,例如
<div class="foo bar">
如果在类名周围有多余的空格,它也将不匹配:
<div class=" foo ">
“改进”的XPath选择器
//*[contains(@class, "foo")]
也不行!因为它错误地将元素与foobar类匹配,例如
<div class="foobar">
值得感谢的是我在网上发现的最早解决此问题的解决方案:http :
//dubinko.info/blog/2007/10/01/simple-parsing-of-space-seprated-attributes- in-xpathxslt /