2011-03-14 60 views
0

我有以下的XPath 1.0查詢:當我想要的節點存在時,爲什麼我的XPath查詢返回默認節點?

/root/Nodes/*[self::CustomNode[not(../DefaultNode)]|self::DefaultNode]/Name

據我瞭解,這將返回/root/Nodes/CustomNode/Name如果它存在,或者/root/Nodes/DefaultNode/Name如果它沒有找到。然而,/root/Nodes/DefaultNode/Name被返回,即使/root/Nodes/CustomNode/Name存在。任何想法如何解決這個問題?

DefaultNode節點總是在前進的文檔順序CustomNode節點。

謝謝

+0

這是一個重複的[我如何返回不同的節點,如果第一個節點沒有在XPath查詢是否存在?(http://stackoverflow.com/questions/5292135/how-do-i-return-一,不同的節點,如果最第一節點 - 犯規 - 存在 - 在-AN-XPath的QUER) – 2011-03-14 17:16:54

+0

你的假設是錯誤的,因爲你已經從我的previus的回答倒的條件。如果你想'CustomNode'或'DefaultNode'時前不存在,你應該使用這個謂詞'[自:: CustomNode |自:: DefaultNode的[不是(../ CustomNode)]]' – 2011-03-14 17:20:16

+0

我明白了。這是問題所在。謝謝。 – Tom 2011-03-14 17:24:16

回答

1

你在想垂直線(|)是否像OR一樣工作?

下面是詳細信息:http://www.w3schools.com/xpath/xpath_operators.asp

|計算兩個節點集: // book | // CD返回一個節點集與所有的書和CD元素

語義:
它返回一個滿足條件A或條件B
它返回一個滿足條件A節點和符合條件B.

節點的節點
+0

我明白了。我用'或'替換了管道,但它仍然返回默認節點。有任何想法嗎?謝謝 – Tom 2011-03-14 17:09:10

+0

請注意表達式在謂詞中。一個節點集的有效布爾值是真的,除非它是空的。 – 2011-03-14 17:23:38