2011-03-08 21 views
1

我需要採取所有"//ul/li[not(@*)][count(*)=0]",但那些具有<div>父項的除外。我試過"//not(div)/ul/li[not(@*)][count(*)=0]",但不幸的是它不起作用。 有誰知道,我該如何處理? 在此先感謝。Xpath:基於父值的查詢中的例外

+0

問得好,+1。請參閱我的答案,以獲取選擇所需節點的最短XPath表達式。 :) – 2011-03-09 05:40:01

回答

2

我想你需要:

//ul[not(parent::div)]/li[not(@*|*)] 

或者:

/descendant-or-self::node()[not(self:div)]/ul/li[not(@*|*)] 

兩個選擇這樣ul時,它的根元素,也。

+0

是的,那正是我要找的。 – 2011-03-08 22:57:52

+0

對於正確的答案+1。 – Flack 2011-03-09 05:37:29

1

使用

//*[not(self::div)]/li[not(@*) and not(*)] 

可略有刪節等效:

//*[not(self::div)]/li[not(@*|*)] 
+0

+1簡潔。 – Flack 2011-03-09 05:38:30

+0

不幸的是, 1)它有一個parcing錯誤 - 我認爲這是因爲錯過了: 而不是 '// * [not(self :: div)]/li [not(@ *)and not(*)] ' 但是 '// * [not(self :: div)]/li [not(@ *)and not(*)]' 2)用那個正確的表達式我有一個不想要的結果 – 2011-03-10 18:51:46

+0

@CodeJunkie:感謝您的好消息 - 我更正了兩個表達式,現在它們在語法上是正確的。至於得到一個不想要的結果,請您提供可以證明這一點的最簡單的XML文檔(通過編輯您的問題)?也許你錯誤地要求了你的要求,或者錯過了一個額外的要求 – 2011-03-10 20:50:59