我仍然无法找到一个很好的解决方案来处理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#没有那么有经验,我已经阅读了一些例子,但仍然找不到一个好的解决方案。
如果有人能提供帮助,我将不胜感激。
答案 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 - 速度非常快,但很容易倒退