我正在尝试查找某个节点的祖先。我们称之为“NodeA”。我得到一个“NodeA”节点列表,并希望查找其祖先以检查某个属性值。这是我的代码,用于检索所有“NodeA”节点:
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实例,我不能只是在那时得到我的祖先而不必通过导航器评估表达式吗?类似于以下内容(其中item是XPathNavigator类型):
item.GetAncestors();
或
Helper.GetAncestors(fullXML, item)
我意识到该项目上有一个SelectAncestors方法,但我没有运气得到它。但如果是这样的话,我们将非常感激一个例子
<NodeAGrandDaddy>
<NodeADaddy>
<NodeA>
<NodeA/>
<NodeADaddy/>
<NodeAGrandDaddy/>
答案 0 :(得分:2)
好的,好吧,您可以使用Select
方法ancestor-or-self::*
,即:
item.Select("ancestor-or-self::*")