2014-10-27 21 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等