• 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不熟悉的园友可以参考其他教程!

     

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

  • 相关阅读:
    Error:dojo.data.ItemFileWriteStore:Invalid item argument
    TypeError:_12.store.query is not a function
    Error:dijit.tree.TreeStoreModel:root query returned 0 items
    dijit.byId("grid") is undefined
    ORA-00600:internal error code,arguments:[keltnfy-idmlnit],[46],[1],[],[],[],[],[]
    gc cr block busy
    gc buffer busy acquire
    gc cr request
    LVS+Keepalived实现高可用集群
    关于函数授权问题
  • 原文地址:https://www.cnblogs.com/saper/p/1326912.html
Copyright © 2020-2023  润新知