在短暂的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