2014-10-27 50 views
0

XML例子:如何从XML节点得到 “的XPath” 在C#

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

给定的属性@id:

我希望得到以下路径:

[email protected]=Kat 
[email protected]=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

你是什么意思 “得到的路径,给出一个属性” 是什么意思?识别XML文件中所有出现的属性“id”? – 2014-10-27 13:53:45

+1

那些看起来不像我的XPath表达式。如果这是您想要生成的,那么这很好,但如果它不是XPath,则不要将其称为XPath。 – 2014-10-27 14:00:16

+0

好吧,对不起,但我想生成这样的东西 – Tee 2014-10-27 14:20:58

回答

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); 
} 

我强烈建议你真正去/详细信息/姓/ @ ID =吉的东西是更自然的可读性,因。是合法的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); 
} 

返回/详细信息/中间名/ @ ID = TeeKat等