当前位置:  开发笔记 > 编程语言 > 正文

在C#中遍历XML树

如何解决《在C#中遍历XML树》经验,为你挑选了1个好方法。

我是.net和c#的新手,所以我想确保我正在使用正确的工具来完成工作.

我收到的XML是对另一台机器上的目录树的描述,因此深入了解多层次.我现在需要做的是获取XML并创建一个对象结构(自定义类),并使用XML输入中的信息填充它们,如文件,文件夹,标签,属性......

在我看来,这个XML输入的Tree结构使得它成为使用递归来遍历树的主要候选者.

在.net 3.5中有不同的方法吗?

我看过XmlReaders,但它们似乎是以线性方式走在树上,而不是我正在寻找的......

我收到的XML是第三方API的一部分,因此不受我的控制,并且可能会在未来发生变化.

我已经研究了反序列化,但它有缺点(黑盒实现,需要声明成员是公共的,慢的,只适用于简单的对象......)也将它从列表中取出.

感谢您对此的意见.



1> Jason Jackso..:

我会在System.Xml.Linq中使用XLINQ类(这是您需要引用的命名空间和程序集).将XML加载到XDocument中:

XDocument doc = XDocument.Parse(someString);

接下来,您可以使用递归或伪递归循环来迭代子节点.您可以选择以下子节点:

//if Directory is tag name of Directory XML
//Note: Root is just the root XElement of the document
var directoryElements = doc.Root.Elements("Directory"); 

//you get the idea
var fileElements = doc.Root.Elements("File"); 

变量directoryElementsfileElements将是IEnumerable类型,这意味着您可以使用类似foreach的东西来遍历所有元素.构建元素的一种方法是这样的:

List files = new List();

foreach(XElelement fileElement in fileElements)
{
  files.Add(new MyFileType()
    {     
      Prop1 = fileElement.Element("Prop1"), //assumes properties are elements
      Prop2 = fileElement.Element("Prop2"),
    });
}

在示例中,MyFileType是您为表示文件而创建的类型.这是一种蛮力攻击,但它将完成工作.

如果要使用XPath,则需要使用 System.Xml.XPath.


关于System.Xml与System.Xml.Linq的注释

自1.0天以来,.Net中有许多XML类.这些(主要)在System.Xml中.在.Net 3.5中,在System.Xml.Linq下发布了一组精彩的新XML类.我不能过分强调它们比System.Xml中的旧类更好.我强烈推荐给任何.Net程序员,特别是刚进入.Net/C#的人.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有