2014-02-11 85 views
2

我試圖查找某個節點的祖先。我們稱之爲「NodeA」。我得到的「NodeA上」節點列表,並想查找其祖先檢查某個屬性value.Here的我的代碼檢索所有「NodeA上」節點:通過祖先xPath通過XPathNavigator對象找到祖先,而不是通過表達式評估

String xPathExpression = "//*[local-name()='NodeA']"; 
XPathNodeIterator nodeSet = (XPathNodeIterator)navigator.Evaluate(xPathExpression); 
foreach (XPathNavigator item in nodeSet) 
{ 
     // Iterate through ancestors in here. 
} 

在「//迭代這裏」區域中,我可以通過一個表達式評估我的節點,並得到祖先通過以下方式列表(每個‘NodeA上’):

XPathNavigator item; 
var ancestorExpression = string.Format("//*[name()='{0}']/ancestor-or-self::*", item.Name); 
XPathNodeIterator ancestors = (XPathNodeIterator)navigator.Evaluate(ancestorExpression); 

然而,這似乎是多餘的,因爲我有原始的XML,和一個XPathNavigator實例,我可以不只是讓我的祖先在那一點上,而不必通過導航器評估表達式?像下面(其中產品類型的XPathNavigator):

item.GetAncestors(); 

Helper.GetAncestors(fullXML, item) 

我意識到人們對項目進行了SelectAncestors方法,但我還沒有運氣得到它的工作。但是,如果這是它,一個例子將是非常讚賞

<NodeAGrandDaddy> 
    <NodeADaddy> 
     <NodeA> 
     <NodeA/> 
    <NodeADaddy/> 
<NodeAGrandDaddy/> 
+0

提供輸入XML。 –

+0

基里爾。我添加了它,但它並不重要,因爲我想抓住所有的祖先,不管節點類型如何。我似乎無法使用XPathNavigator實例進行此操作。 – jsirr13

回答

2

好了,好了,概率可以用Selectancestor-or-self::*,即:

item.Select("ancestor-or-self::*") 
+1

讓SelectAncestors方法讓我很困惑。非常直觀,不敢相信我忽略了它。謝謝! – jsirr13

+0

@ jsirr13,歡迎光臨。 –