2013-07-09 50 views
0

我试图找到与类 “foo” 的元素为什么我的xpath匹配不需要的元素?

<div id="foo1"> 
<div id = "foo2"> 
<div class = "foo"> 
</div> 
</div> 
</div> 

这是我的XPath:

/div/div/div[contains(@class,'foo')] 

这是它的查找代码:

<div id="foo1"> 
<div id = "foo2"> 
<div class = "foo-err"> 
</div> 
</div> 
</div> 

路径正在返回div class =“foo-err”元素

回答

5

contains()是一个子串匹配。它基本上是说“if'foo'是ANYWHERE在类属性中,匹配元素”。

如果你想完全匹配,然后尝试

[@class='foo'] 
+0

那么xpath会是:/ div/div/div [@ class ='foo'] – meggex

+0

是的,它的工作原理!谢谢! – meggex

+1

这个故事的寓意:不要以为你可以猜测一个函数从它的名字中所做的一切。 –

1

如果你需要匹配类的列表foo但不foo-err,你需要一个更复杂的结构:[contains(concat(' ', @class, ' '), ' foo ')],它会寻找FOO被空间包围的全班级字符串中的空间也被空间包围。因此,'foo bar'' foo bar '→包含' foo ',但是'foobaz bar'' foobaz bar '→不包含' foo '

相关问题