首页 > 代码库 > 对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>

 

<style></style>

 

将这个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数据,这样即使是大批量的数据也可以很好的组织起来,有利于后面程序对数据的操作
<style></style>
       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>

 

<style></style>

 

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

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