XPath:如何选择节点的第一个给定的父节点?

XPath:如何选择节点的第一个给定的父节点?

问题描述:

我的XML:XPath:如何选择节点的第一个给定的父节点?

<root> 
    <child> 
    <childOfChild> 
     <anotherLostChild> 
      <currentSelectedNode> 
       SOME TEXT 
      </currentSelectedNode> 
     </anotherLostChild> 
    </childOfChild> 
    </child> 
</root> 

我选择使用节点currentSelectedNode

xpath.SelectSingleNode("//currentSelectedNode") 

但我怎么能恢复到选择第一chilfOfChild父节点(考虑到上下文currentSelectedNode

xpath.SelectSingleNode("//currentSelectedNode")...??? 

你的问题确实是容易混淆写,但它听起来像你想要的ancestor axis,是这样的:

//currentSelectedNode/ancestor::childOfChild[1] 

(纯XPath的解决方案)

xpath.SelectSingleNode("//currentSelectedNode/../..") 

这将选择父亲的父亲

在Linq-To-XML中,您只需要使用祖先方法:

要获得立即的祖先或:

xElement.Ancestor(); 

要指定祖先:

xElement.Ancestor("NameOfTheAncestorNode"); 
+0

Ancestor()方法不存在。 – WillB3 2016-03-18 18:20:59

使用XElement xElem,您可以使用xElem.Parent获得直接父。

https://msdn.microsoft.com/en-us/library/system.xml.linq.xobject.parent(v=vs.110).aspx

要选择特定的祖先节点,您可以使用

xElem.Ancestors("currentSelectedNode"); 

让所有祖先与该特定节点名称。

https://msdn.microsoft.com/en-us/library/bb348268(v=vs.110).aspx