我試圖選擇所有具有id="mydiv"
的dom元素,但排除也具有class="exclass"
的元素。現在我正在做第一部分//*[@id="mydiv"]
。我如何添加類排除部分?xpath排除具有類別的元素
P.S.如果你想知道爲什麼我需要選擇多個具有相同ID的元素,我只是在處理一個我無法控制的現有DOM。
我試圖選擇所有具有id="mydiv"
的dom元素,但排除也具有class="exclass"
的元素。現在我正在做第一部分//*[@id="mydiv"]
。我如何添加類排除部分?xpath排除具有類別的元素
P.S.如果你想知道爲什麼我需要選擇多個具有相同ID的元素,我只是在處理一個我無法控制的現有DOM。
您可以使用否定:
//*[@id="mydiv and @class!="exclass"]
如果class
屬性可能不是所有的節點上都存在,你需要這樣的:
//*[@id="mydiv" and (not(@class) or @class!="exclass")]
最後的(有點)奇邏輯可以變成什麼樣邁克爾提出:
//*[@id="mydiv" and not(@class="exclass")]
雖然,個人而言,XPath無法比較的事實如果缺少屬性,則感覺有點像缺點。
這不是什麼用戶要求。 Downvoting。看到我的答案。 –
@MichaelKay謝謝你指出,我已經更新了我的答案;正如我的更新中提到的那樣,我覺得擁有「任何東西都不能與任何東西相比」是xpath的一個缺點;只是想不出爲什麼該行爲會有用的任何理由:/ –
的回答書面問題是
//*[@id="mydiv" and not(@class="exclass")]
如果有@id屬性,它的值是mydiv條件的前半部分是真實的。如果不存在具有exclass值的@class屬性,也就是說,如果沒有class屬性,或者存在class屬性,並且其值不是「exclass」,則後半部分爲true。
避免使用!=在這種情況下:90%的時間,如果你想寫A=B
,你可能想要not(A=B)
。在A或B不是單例的情況下,它的含義是不同的,也就是說,它或者是空的,或者可以包含多個值。
TriXPath(如在技巧)規則! – jolt
你有多個具有相同ID的元素?這是不健康的,你知道的。 http://stackoverflow.com/questions/2487074/what-are-the-side-effects-of-using-multiple-instances-of-a-single-id-name-in-htm – jolt