ADO.NET结合XPath查询读取数据库

这几天狂看关于读写XML文件方面的资料,虽然XMLMSSQL方便,不用安装数据库服务软件,也不用附加数据库等操作,但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不熟悉的园友可以参考其他教程!

 

注:有纰漏错误的地方请指正,谢谢!

原文地址:https://www.cnblogs.com/saper/p/1326912.html