是否可以获取XDocument中当前XElement的路径?例如,如果我正在遍历文档中的节点,是否有一种方法可以获取该节点(XElement)的路径,以便返回类似于\root\item\child\currentnode的内容?
是否可以获取XDocument中当前XElement的路径?例如,如果我正在遍历文档中的节点,是否有一种方法可以获取该节点(XElement)的路径,以便返回类似于\root\item\child\currentnode的内容?
虽然没有内置的方法,但是您可以编写自己的扩展方法:
public static string GetPath(this XElement node)
{
string path = node.Name.ToString();
XElement currentNode = node;
while (currentNode.Parent != null)
{
currentNode = currentNode.Parent;
path = currentNode.Name.ToString() + @"\" + path;
}
return path;
}
XElement node = ..
string path = node.GetPath();
我知道这个问题很老了,但是如果有人想要一个简单的一行回答:
XElement element = GetXElement();
var xpath = string.Join ("/", element.AncestorsAndSelf().Reverse().Select(a => a.Name.LocalName).ToArray());
使用:
using System.Linq;
using System.Xml.Linq;
根据您想要如何使用XPath。在任何情况下,您都需要自己遍历树并在途中构建XPath。
如果您想要一个可读的字符串以供显示-只需连接父节点的名称(请参见BrokenGlass建议)即可正常工作
如果您想要稍后选择XPath
请注意,如果您想要XML内部节点的XPath的真正通用版本,则可能需要考虑注释和处理指令等特殊节点。