对xml文档数据的读取

在短暂的C#程序开发过程中,我发现使用xml文档来存储一些数据还是很不错的!当然有了数据当然要读取,在开发过程我遇到了两种对xml文档数据进行读取的方法。

  • 就是最基本的利用System.Xml命名空间,通过各个节点来获得xml中的数据。

例如下面的Xml数据:

<?xml version="1.0"?>
<BookStore>
    <book>
        <title>C#入门经典</title>
        <author>Karli Watson</author>
        <pages>888</pages>
    </book>
    <book>
        <title>长安乱</title>
        <author>韩寒</author>
        <pages>260</pages>
    </book>
        <book>
        <title>一座城池</title>
        <author>韩寒</author>
        <pages>300</pages>
    </book>
        <book>
        <title>三重门</title>
        <author>韩寒</author>
        <pages>280</pages>
    </book>
        <book>
        <title>红楼梦</title>
        <author>曹雪芹</author>
        <pages>1200</pages>
    </book>
        <book>
        <title>三国演义</title>
        <author>罗贯中</author>
        <pages>1000</pages>
    </book>
        <book>
        <title>疯狂的程序员</title>
        <author>绝影</author>
        <pages>300</pages>
    </book>
        <book>
        <title>老人与海</title>
        <author>海明威</author>
        <pages>190</pages>
    </book>
</BookStore>
将这个xml文档保存在桌面上,文件名为:“BookStore.xml”,通过递归算法,将每个节点全部得到,再输出。

       static public void ReadXmlByNode()
        {
            XmlDocument document = new XmlDocument();
            document.Load(FilePath);

            XmlNode RootNode = document.DocumentElement; //得到根节点
            getValue(RootNode);
        }

        static public void getValue(XmlNode node)
        {
            if (node.ChildNodes.Count == 0)
            {
                Console.WriteLine(node.InnerText);
            }
            else
            {
                foreach (XmlNode ChildNode in node.ChildNodes)
                {
                    getValue(ChildNode);
                }
            }
        }
 

这样就可以将xml中的数据全部输出,但是这种方式在大批量的输出的时候得到的数据太乱,不好操作。对于特定(指定)节点进行操作,这个方法是可以的。

  • 还有一种办法是直接将xml文档转化为DataTable数据,这样即使是大批量的数据也可以很好的组织起来,有利于后面程序对数据的操作
       static public void ReadXmlByDataSet()
        {
            DataSet dataset = new DataSet();
            dataset.ReadXml(FilePath, XmlReadMode.Auto);
            DataTable datatable = dataset.Tables[0];
            foreach (DataRow row in datatable.Rows)
            {
                for (int i = 0; i < datatable.Columns.Count; i++)
                {
                    Console.WriteLine(row[i].ToString());
                }
            }
        }
这个对于标准的xml文档来说,是很好的一种数据读取方式。这个方式的缺点在与当xml的节点级数变多以后,就无法将所有的数据全部读出了。将上面的xml文档修改一下,改成下面的这个样子:

<?xml version="1.0"?>
<BookStore>
    <book>
        <title>C#入门经典</title>
        <author>Karli Watson</author>
        <pages>888</pages>
    </book>
    <book>
        <title>长安乱</title>
        <author>韩寒</author>
            <age>30</age>
            <sex>男</sex>
            <nation>汉族</nation>
            <country>中国</country>
        <pages>260</pages>
    </book>
        <book>
        <title>一座城池</title>
        <author>韩寒</author>
        <pages>300</pages>
    </book>
        <book>
        <title>三重门</title>
        <author>韩寒</author>
        <pages>280</pages>
    </book>
        <book>
        <title>红楼梦</title>
        <author>曹雪芹</author>
        <pages>1200</pages>
    </book>
        <book>
        <title>三国演义</title>
        <author>罗贯中</author>
        <pages>1000</pages>
    </book>
        <book>
        <title>疯狂的程序员</title>
        <author>绝影</author>
        <pages>300</pages>
    </book>
        <book>
        <title>老人与海</title>
        <author>海明威</author>
        <pages>190</pages>
    </book>
</BookStore>

对“长安乱”中的作者节点创建了几个子节点。仍然使用上面的dataset代码来读取数据,就会出现问题,但是使用第一种方法,则还是可以将全部数据正常的读取出来。

上面这些是我对xml文档暂时的体会,欢迎各位大神指正!

对xml文档数据的读取

时间: 2024-10-25 07:00:03

对xml文档数据的读取的相关文章

用javabean封装xml文档数据

//book.xml <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <name>冰与火之歌</name> <author>乔治马丁</author> <year>2014</year> <price>89</price> <la

用C#读取XML文档

本文将以一个非常简单的例子来说明如何使用C#访问一个XML文件并且读取其中的信息.例子本身并无任何实际意义,它只是简单的介绍了如何调用微软的XML标准以及如何运用到实际当中去.希望能够对初次接触C#或者未尝试过通过C#读取XML文件的读者有所启发.本文旨在抛砖引玉,希望能与更多的朋友交流和分享经验.    制作过程 1. 运行Visual Studio.NET,新建Visual C#.NET工程,这里取名为ReadXML. 2. 在解决方案资源管理器中,将Form1.cs改名为frmAuthor

[翻译][Ruby教程]Nokogiri - 解析HTML/XML文档 / Parsing an HTML/XML Document

From a String From a File From the Internet Parse Options Encoding 原文: Parsing an HTML/XML Document 解析HTML/XML文档 从字符串读取 We’ve tried to make this easy on you. Really! We’re here to make your life easier. 1 html_doc = Nokogiri::HTML("<html><bo

java操作xml文档

目前最常用的XML解析技术是DOM和SAX. DOM是基于XML的树结构来完成解析的,适用于多次访问的XML文档,但是DOM解析比较消耗资源:而SAX是基于事件解析,适用于大数据量的XML文档,占用资源少,内存消耗小. DOM是文档对象模型(Document Object Model) 首先DOM会将XML文档映射成一颗倒挂的树,在这棵树中,每个节点都是以节点对象的形式存在的. 我们通过操作这些对象就可以完成XML文件的读写任务了. 我们可以直接根据节点的名称或属性查找该节点对象,也可以根据一个

Java对XML文档的解析

1. DOM解析 DOM的全称是Document Object Model,也即文档对象模型.DOM解析会将XML文档以对象树的方式存入内存,因此,DOM解析内存消耗巨大.当然由于DOM解析将XML以节点树的方式调入内存,所以对文档进行增删改查(crud)比较方便.DOM分析器把整个XML文档转化成DOM树放在了内存中,因此,当文档比较大或者结构比较复杂时,对内存的需求就比较高.而且,对于结构复杂的树的遍历也是一项耗时的操作.所以,DOM分析器对机器性能的要求比较高,实现效率不十分理想. ---

XML文档的解析

XML文档解析:操作xml文档,将文档中的数据读取到内存中  * 操作xml文档   1. 解析(读取):将文档中的数据读取到内存中   2. 写入:将内存中的数据保存到xml文档中.持久化的存储 * 解析xml的方式:   1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树    * 优点:操作方便,可以对文档进行CRUD的所有操作    * 缺点:占内存   2. SAX:逐行读取,基于事件驱动的.    * 优点:不占内存.    * 缺点:只能读取,不能增删改 * x

Android解析XML文档的两种方式的简单对比

Android之所以会用到解析XML文档,不仅与JAVA对XML的解析比较简单,而且还因为XML是Android在网络间传递信息的主要存储方式.下面我简单谈谈Android对XML文档解析的两种方式:dom和sax.dom解析方式是,解析方法将一个XML文件看成是一棵树.由数据结构的知识我们知道对树的处理比较简单,就是对树的节点进行增,删,改,查,这也是dom的一个最大优点.但是,dom方式在解析的时候是一次性就将整个XML文档读进内存,这坏处不用我说了吧,我宝贵的内存是禁不起这么折腾的. sa

文档对象模型操作xml文档

简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规范化接口.DOM是表示文档(比如HTML和XML)和访问.操作构成文档的各种元素的应用程序接口,它以树状结构表示HTML和XML文档,定义了遍历这个树和检查.修改树的节点的方法和属性. DOM的核心API还允许你创建和填充文件.加载文档并保存. 2.2DOM实现 微软的net框架在Systemx.x

XML文档类型定义---DTD文档

DTD的作用 XML文档是一种元标记语言,即一种定义标记语言的语言.在XML中可以创建新的标记语言,这些新的标记语言(也叫标记集)要通过文档类型定义(Document Type Definitions,DTD)来定义.DTD文档是这些新的标记语言的法律性文档.如果XML文档的语法符,DTD的定义和规定,那么就称为一个合法的XML文档,否则就是非法的XML文档.合法的XML文档在实际应用中的地位很重要,因为只有合法的XML文档才能被应用软件有效地处理. DTD定义了文档的逻辑结构,规定了文档中所使