关闭

XML(3)XDocument与XmlDocument递归读取xml文件

标签: xmlXDocument
790人阅读 评论(0) 收藏 举报
分类:

通过XDocument与XmlDocument将xml文件读取到TreeView上,其中主要是用递归方式将xml下的元素都加载到TreeView控件上面。

XDocument

步骤:

(1)加载xml文件

(2)获取根节点

(3)将xml根元素加载到TreeView根节点上

(4)递归加载根元素下面的元素(这里创建一个方法)

<span style="font-size:18px;">//1、读取xml文件(XDocument)
            //加载xml文件
            XDocument document = XDocument.Load("list1.xml");
            //2、先获取根节点
            XElement rootElement = document.Root;
            //3、将xml的根元素加载到TreeView的根节点上
            TreeNode rootNode = treeView1.Nodes.Add(rootElement.Name.ToString());
            //4、递归加载
            LoadXmlToTreeView(rootElement, rootNode.Nodes);</span>

<span style="font-size:18px;"> private void LoadXmlToTreeView(XElement rootElement, TreeNodeCollection treeNodeCollection)
        {
            //获取根元素rootElement下面的所有直接子元素
            //rootElement.Elements();
            foreach (XElement item in rootElement.Elements())
            {
                if (item.Elements().Count()==0)
                {

                    treeNodeCollection.Add(item.Name.ToString ()).Nodes .Add(item.Value);
                }
                else
                {
                    //将当前子元素加到TreeView的节点集合上
                    TreeNode node = treeNodeCollection.Add(item.Name.ToString());
                    LoadXmlToTreeView(item, node.Nodes);
                }
                

            }
        }</span>

XmlDocument

步骤:XmlDocument的前三步与XDocument差不多,差别就是后面第四步的递归加载,主要从代码就可以看出。

<span style="font-size:18px;">//1、加载xml文件到对象
            XmlDocument document = new XmlDocument();
            //2、将xml文件加载到dom对象上
            document.Load("List1.xml");
            //3、获得xml根节点
            XmlElement rootElement = document.DocumentElement;
            //将xml根元素加载到TreeView上
            TreeNode rootnode = treeView1.Nodes.Add(rootElement.Name);
            //实现递归将xml文件加载到treeview上
            LoadxmltoTreeViews(rootElement, rootnode.Nodes);</span>
<span style="font-size:18px;">private void LoadxmltoTreeViews(XmlElement rootElement, TreeNodeCollection treeNodeCollection)
        {

            //循环rootElement下的所有子元素加载到TreeNodeCollection集合中
            foreach (XmlNode item in rootElement.ChildNodes)
            {
                //在继续之前需要判断一下当前节点是什么类型的节点
                if (item.NodeType ==XmlNodeType .Element )
                {
                    //如果当前节点是一个元素,则把该元素加载到TreeView上
                    TreeNode node= treeNodeCollection.Add(item.Name);
                    //递归调用
                    LoadxmltoTreeViews((XmlElement)item, node.Nodes);

                }
                else if (item.NodeType ==XmlNodeType .Text |item.NodeType ==XmlNodeType .CDATA)
                {
                    treeNodeCollection.Add(item.InnerText);

                }
            }
        }</span>


总结

(1)XmlDocument要比XDocument复杂点。

(2)XmlDocument是标准的xml读写类,所以扩展范围广,对于XDocument是XmlDocument的升级版可能在别的平台下不能使用,因为这些平台可能就是用的原来的XmlDocument,其中XDocument的一些方法或者属性这里不存在。所以存在一定的局限性。

(3)foreach循环中的语法糖var对XDocument能够识别出来类型,而对于XmlDocument就不能识别出类型,但是XmlElement的父类的父类就是XmlNode。




1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

C#操作Xml:通过XmlDocument读写Xml文档

转自:http://www.cnblogs.com/yukaizhao/archive/2011/07/19/csharp_xmldocument_access_xml.html X...
  • lyljp
  • lyljp
  • 2016-10-09 16:15
  • 1794

XDocument操作xml文件基本操作

一、读取xml文件,现在存在这样一个DefaultStyle.xml
  • hxj135812
  • hxj135812
  • 2015-03-20 15:22
  • 2654

【C#】C#操作XML方法:新增、修改和删除节点与属性

 一 前言 先来了解下操作XML所涉及到的几个类及之间的关系  如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家 * 1 XMLElement 主要是针对节点的一...
  • ghxbob
  • ghxbob
  • 2014-02-09 20:56
  • 3716

递归代码包括从xml文件中读取信息从本地磁盘中加载信息等

  • 2010-07-03 19:30
  • 113KB
  • 下载

XMLDocument方式读取XML文件(树结构)

本笔记计划总结XMLDocument方式读取XML文件并与readXML 方式进行对比 功能需求: 提供路线表,包含路线及路线内站台信息。提供实际得到的路线及站台号信息,核对该站台号是否在该路线中...
  • xunzhaogongbing
  • xunzhaogongbing
  • 2012-02-02 16:34
  • 796

利用递归方式遍历XML文件

  • 2010-07-02 10:32
  • 107KB
  • 下载

Delphi 中的 XMLDocument 类详解(3) - 读取 xml 文件

先虚拟一个测试文件: test.xml; 放在 c:\temp\ 下备用. &lt;?xml version="1.0" encoding="gb2312"?&gt; &lt;科室名单 备注="测试"...
  • beyondqd
  • beyondqd
  • 2011-08-26 16:27
  • 1224

dom4j 递归读取XML文件

在解析XML文件的时候,可选择的方案有:
  • supingemail
  • supingemail
  • 2014-07-11 11:33
  • 632

C#中用XmlDocument对象获取XML文件中的节点值

C#中用XmlDocument对象获取XML文件中的节点值 XmlDocument是表示DOM的类。 1.加载XML文档:使用load()方法加载XML文档; 2.读取节点:使用GetEleme...
  • wanglei_samrtfish
  • wanglei_samrtfish
  • 2012-05-15 12:47
  • 5416

C# XML文件的一些操作(XmlDocument、XmlElement、XmlNode)

C#操作xml主要有这么几个对象:XmlDocument、XmlElement、XmlNode 命名空间: using System.Xml; 知识补充: XmlNode和XmlElement...
  • xiaobai1593
  • xiaobai1593
  • 2012-03-07 09:15
  • 40110
    个人资料
    • 访问:31059次
    • 积分:1382
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:0篇
    • 译文:1篇
    • 评论:438条
    欢迎Q我
    QQ与我联系
    博客专栏
    XML

    文章:6篇

    阅读:4292
    C#

    文章:5篇

    阅读:3900
    文章分类
    最新评论