我試圖查找某個節點的祖先。我們稱之爲「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/>
提供輸入XML。 –
基里爾。我添加了它,但它並不重要,因爲我想抓住所有的祖先,不管節點類型如何。我似乎無法使用XPathNavigator實例進行此操作。 – jsirr13