2013-06-12 80 views
2

我有一個XML文件,這樣從名稱不同的XML節點

<root> 
<segmentNameA attributeName="10" /> 
<segmentNameB attributeName="50" /> 
</root> 

這裏獲取同一屬性的總和是我的代碼:

XPathDocument xPathDocument = new XPathDocument(analysisFileToProcess); 
XPathNavigator Navigator = xPathDocument.CreateNavigator(); 

我想獲得的所有的總和attributeName屬性(10 + 50)。

這就是我做

var sum /*want to obtain 60*/ = Navigator.Select(Navigator.Compile("sum(/root/*[self::segmentNameA or self::segmentNameB]/@attributeName)")); 

我得到一個表達式「有一個無效令牌」。

然而,當我做到這一點

var nodes = Navigator.Select(Navigator.Compile("/root/*[self::segmentNameA or self::segmentNameB]")); 

我得到所有包含我想總結的屬性的節點。

而當我這樣做

var nodes = Navigator.Select(Navigator.Compile("/root/*[self::segmentNameA or self::segmentNameB]/@attributeName")); 

我得到的屬性列表。爲什麼我不能在這個上使用sum函數?

難道有人請向我指出我做錯了什麼?

回答

1

發生這種情況的原因是,XPath表達式必須計算爲節點集。
使用Evaluate方法代替:

var sum = (double)Navigator.Evaluate("sum(/root/*[self::segmentNameA or self::segmentNameB]/@attributeName)"); 
+0

事實上,編輯,感謝指針(仍然沒有工作,雖然)。 –

+1

@ G.Abitbol,我已經更新了我的答案。 –

+0

基里爾,現在我想到了,我收到了這個錯誤信息,儘管它非常簡單,但我沒有想到在我的導航器上使用其他方法......現在它像一個魅力。非常感謝。 –