是否可以在XDocument中获取当前XElement的路径?例如,如果我在文档中的节点上进行迭代,那么我可以通过某种方式获取该节点的路径(XElement),以便返回类似\ root \ item \ child \ currentnode? p>的内容
答案 0 :(得分:2)
内置任何内容,但您可以编写自己的扩展方法:
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();
但这并不考虑元素在其对等组内的位置。
答案 1 :(得分:1)
取决于您希望如何使用XPath。在任何一种情况下,你都需要自己走树并在途中构建XPath。
如果你想要显示可读的字符串 - 只需加入prent节点的名称(参见BrokenGlass建议)就可以正常工作
如果您想稍后在XPath上选择
请注意,如果您希望将XPath的真正通用版本发送到XML中的节点,则可能需要考虑注释和处理指令等特殊节点。
答案 2 :(得分:0)
我知道这个问题很老,但万一有人想要一个简单的衬垫:
XElement element = GetXElement();
var xpath = string.Join ("/", element.AncestorsAndSelf().Reverse().Select(a => a.Name.LocalName).ToArray());
用途:
using System.Linq;
using System.Xml.Linq;