对xml文档数据的读取

摘要:
在C#程序开发的短暂过程中,我发现使用xml文档存储一些数据是非常好的!当然,如果您有数据,就需要读取它。在开发过程中,我遇到了两种读取xml文档数据的方法。这是使用系统的最基本方法。Xml命名空间,通过各种节点获取Xml中的数据。这种方法的缺点是,当xml中的节点数量增加时,无法读取所有数据。将上述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文档数据的读取》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JS-获取URL请求参数爱回收Java实习面试(offer到手含面试经验及答案)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#(4):XML序列化

一、使用 System.Xml.Serialization类 1、定义元数据 引入System.Xml.Serialization命名空间。 XML序列化常用属性: XmlRoot XmlType XmlText XmlEnum [Serializable] [XmlRoot] public class Product { public int...

python处理xml大文件[xml.sax]

博客已迁移, 新地址 ===================== 之前使用过python使用dom读取简单配置xml文件的http://blog.csdn.net/wklken/article/details/7270117 今天遇到大文件处理,使用dom占用资源太多,改用sax处理 dom和sax区别可以自己google下 需求:读取xml数据文件,文...

将xml文件数据导入到sql中[原]

        设计数据库的时候为了操作的方便,我们可以选择用xml格式文件来保存我们的数据表结构及其数据。这样的好处是多方面的,设计简单,操作方便,自己可以开发一个设计数据库表的应用程序直接对xml文件进行操作。其实另外一个好处是在最终使用的时候很容易将xml数据导入到任何我们想要的数据库中,不过注明的是这中设计的方法只在于简便,不可能达到其他专门工具的...

Ajax:读取响应首部

   有时,只是想“ping”一下服务器,验证服务器是否正常运行。此时,只需要读取服务器发出的响应首部,而忽略内容。通过读取响应首部,可以得出content-Type(内容类型)、Content-Length(内容长度)。甚至LastModified(最后一次修改)的日期。 <html xmlns="http://www.w3.org/1999/xh...

任务备忘(已经完成):用python写一个格式化xml字符串的程序

功能: 1.将xml中多余的空格,换行符去掉,让xml字符串变成一行。 2.将xml中添加缩进,使用print能正确打印添加缩进后的字符串。 思路: 采用正则表达式来判断xml中字符串的类型: 1.文件头 2.判断元素的种类:带有属性的标签,没有属性的标签,标签内结束的标签,只含有文本的标签,不含有文本的标签。 3.根据标签的级别添加换行符后面的空格 '...

JAX-WS HandlerChain使用详解

JAX-WS的Handler和Servlet的Filter相似,可以对所有WebServicer进行拦截,在Handler中可以记录日志、权限控制、对请求的SOAP消息进行加密,解密等。JAX-WS提供两个Handler接口,LogicalHandler和SOAPHandler。LogicalHandler处理的是Message Payload,只能够访...