使用C#中的属性处理xml树的方法

时间:2013-12-01 12:36:58

标签: c# xml-parsing

我仍然无法找到一个很好的解决方案来处理xml树,如:

<root>
     <lv 1>
        <lv 2>
             <lv 3  d1="h1">
                <lv 4  dd1 = "detail 11">
                <lv 4  dd1 = "detail 12">
             </lv 3>
             <lv 3  d1="h2">
                <lv 4  dd1 = "detail 22">
             </lv 3>
        </lv 2>
     </lv 1>
   </root>

问题在于我想直接转到“lv 3”并建立关系:

(h1,detail11) (h1,detail12) (h2,detail22)

我对C#没有那么有经验,我已经阅读了一些例子,但仍然找不到一个好的解决方案。

如果有人能提供帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,您的xml不是xml,有效表示如下:

<root>
 <lv1>
    <lv2>
         <lv3  d1="h1">
            <lv4  dd1="detail 11"/>
            <lv4  dd1="detail 12"/>
         </lv3>
         <lv3  d1="h2">
            <lv4  dd1="detail 22"/>
         </lv3>
    </lv2>
 </lv1>
</root>

有了这个,你可以写这样的smth:

    var xml = @"<root>
        <lv1>
            <lv2>
                <lv3  d1=""h1"">
                    <lv4  dd1 = ""detail 11""/>
                    <lv4  dd1 = ""detail 12""/>
                </lv3>
                <lv3  d1=""h2"">
                    <lv4  dd1 = ""detail 22""/>
                </lv3>
            </lv2>
        </lv1>
    </root>";

    var doc = new XmlDocument();
    doc.LoadXml(xml);

    foreach (XmlNode lv3Node in doc.SelectNodes("root/lv1/lv2/lv3"))
    {
        foreach (XmlNode lv4Node in lv3Node.SelectNodes("lv4"))
        {
            Console.WriteLine(lv3Node.Attributes["d1"].Value + ";" + lv4Node.Attributes["dd1"].Value);
        }
    }

输出:

h1;detail 11
h1;detail 12
h2;detail 22

C#有三种使用XML的方法:

  • Linq to XML(基于XDocument) - 语法很好,速度很快

  • 使用DOM(基于XmlDocument) - 慢,但允许多次遍历相同的xml

  • XmlReader - 速度非常快,但很容易倒退