• 对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文档暂时的体会,欢迎各位大神指正!

  • 相关阅读:
    awk 字符串连接操作(字符串转数字,数字转字符串)
    Jenkins配置自动发送邮件,成功!
    可嵌入到网页的实用查询代码
    Windows中打开和关闭FSO文件读写权限的方法
    网站项目模型及业务流程分析
    2个JS版的MD5加密脚本
    申请@msn.com的邮箱最新网址
    成功激励格言精选
    随机切换广告图片
    译自MSDN非常详细的IMG,IFRAME的属性参考手册
  • 原文地址:https://www.cnblogs.com/blackcatcjy/p/3920214.html
Copyright © 2020-2023  润新知