2010-01-07 35 views
1

很明顯MSXML6不支持XSLT 2.0,至少不是max()函數。我需要找出其兄弟中包含最高值的節點。他們是任意的順序。如何獲得MSXML6上max()的等價物?

我希望訂單保持一致,因此添加order-by和檢查[0]是沒有問題的。

我想用一個XPath語句來做到這一點。我不想調用模板或涉及更復雜的邏輯。我確定在某處嵌入了令人恐懼的MS Scripting Extensions。好惡。

我想到:

elem1[count(../elem1[@value < current()/@value]) = 0] 

但正如我預期它不工作(返回第一個節點總是)。任何其他漂亮的XPath魔術你能想到嗎?

回答

4

嘗試

elem1[not(../elem1/@value > @value)] 

也就是說,你想要的elem1,這就是它另一個elem1具有更大@value的情況。

靈感來自this handy page

+0

工作就像一個魅力,謝謝! – 2010-01-07 16:15:08

+3

值得一提的是,'>'運算符在提供節點集('../ elem1/@ value')時,會將集合中的所有節點與'@ value'進行比較。這也意味着表達式實際上應該是'elem1 [not(../ elem1/@ value> @value)] [1]',因爲可能有多個節點具有相同的最大值。在這種情況下,所有這些節點都會返回,即使您只對其中一個節點感興趣。 – Tomalak 2010-01-07 17:35:08

+0

良好的捕獲,雖然總是在XPath表達式返回節點集時選擇第一個節點。它似乎是自動的。 – 2010-01-07 22:26:53