如何从C#中的xml节点获取“xpath”

时间:2014-10-27 13:31:19

标签: c# xml

xml示例:

<Details name="Tee">
    <Surname id="Kat"/>
    <MiddleName id="TeeKat"/>
</Details>

给定属性@id:

我想获得以下路径:

Details.Surname.@id=Kat
Details.Surname.@id=TeeKat

我到目前为止的代码:

private static object GetXmlPath(XmlNode node) {
  if (node.NodeType == XmlNodeType.Attribute) {
     return String.Format("{0}@{1}", GetXmlPath(((XmlAttribute)node).OwnerElement), node.Name);
  }
  return node.ParentNode == null ? "" : String.Format("{0}{1}.", GetXmlPath(node.ParentNode), node.Name);
}

1 个答案:

答案 0 :(得分:0)

您的代码似乎主要是为了做您想要的,添加值:

private static object GetXmlPath(XmlNode node) {
  if (node.NodeType == XmlNodeType.Attribute) {
     return String.Format("{0}@{1}={2}", GetXmlPath(((XmlAttribute)node).OwnerElement), node.Name, node.Value);
  }
  return node.ParentNode == null ? "" : String.Format("{0}{1}.", GetXmlPath(node.ParentNode), node.Name);
}

我强烈建议你实际去/ Details / Surname / @ id = Kat以获得更自然可读的内容,因为。在XmlNames中是合法的

即:

private static object GetXmlPath(XmlNode node) {
  if (node.NodeType == XmlNodeType.Attribute) {
     return String.Format("{0}@{1}={2}", GetXmlPath(((XmlAttribute)node).OwnerElement), node.Name, node.Value);
  }
  return node.ParentNode == null ? "/" : String.Format("{0}{1}/", GetXmlPath(node.ParentNode), node.Name);
}

return / Details / MiddleName / @ id = TeeKat等