这几天狂看关于读写XML文件方面的资料,虽然XML比MSSQL方便,不用安装数据库服务软件,也不用附加数据库等操作,但XML毕竟不适合做大的数据存储,因为每当查询读取XML文件时都要先读取它到数据集然后再进行查询(MSSQL是先查询数据,再把查询结果存到数据集),这在无形中占用了一点内存,也失去了一些效率,这在XML文件比较大的时候效果很明显。
所以XML一般用作配置文件用,它的作用也不容小视。学习如何高效率得读写XML文件是.NET程序员必学的技术。
在.NET中很好得提供了对XML的支持,除了二进制读取方式和DOM方式之外还有ADO.NET,通过DataSet载入XML并利用XML的“SQL语句”——Xpath查询可以很方便得进行一些操作。
首先我们的XML文件内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<messages>
<message id="7836733" targer="Loreto" status="sent">
<sender>Steven</sender>
<body>1</body>
</message>
<message id="7836712" targer="Eileen" status="sent">
<sender>Loreto</sender>
<body>2</body>
</message>
<message id="7836735" targer="Steven" status="pending">
<sender>Eileen</sender>
<body>3</body>
</message>
</messages>
文件名称为sample.xml。
现在要读取特定节点的值,在VS2008里面新建一个控制台程序,敲入如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml; //必须要引入的命名空间
using System.Data; //必须要引入的命名空间
namespace ADOXML
{
class Program
{
static void Main(string[] args)
{
DataSet ds = new DataSet(); //建一个DataSet对象用来读取XML
ds.ReadXml("sample.xml");
XmlDataDocument xdd = new XmlDataDocument(ds);
XmlElement xe;
foreach (DataRow dr in ds.Tables["message"].Rows)
{
xe = xdd.GetElementFromRow(dr);
XmlNode xn = xe.SelectSingleNode("/messages/message[@id='7836735']"); //Xpath用处就在这里
foreach (XmlNode xn1 in xn.ChildNodes)
{
if ((xn1.NodeType == XmlNodeType.Element) && (xn1.Name == "sender"))
{
Console.WriteLine(xn1.InnerText.ToString());
}
}
//Console.Write(xn.r.Value);
Console.ReadKey();
}
}
}
}
结果为:Eileen
这个只是简单的读取,至于增删改等操作也是类似,我会在接下去的日子里进行讲解。本文不是讲解XPath的内容,对Xpath不熟悉的园友可以参考其他教程!
注:有纰漏错误的地方请指正,谢谢!