2013-07-09 65 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 '

相關問題