zoukankan      html  css  js  c++  java
  • 以对象的方式来访问xml数据表(一)

      所有实例代码都是以C#演示——

      在将如何以对象的方式来访问xml数据表之前,我们先来谈谈如何用xml文件作为数据库吧!

      平时在开发一些小的应用的时候,需要一个数据库,这个时候虽然可以用SQL server、MySql等第三方数据库,但个人感觉这有点大材小用、而且配置链接起来还很麻烦,这个时候就可以考虑使用xml文件作为数据库,小巧、方便打包。

          先简单的举一个例子:用一个xml文件来保存用户信息(用户可以有多个)

    <?xml version="1.0" encoding="utf-8"?>
    <Users>
      <User>
        <Id>1</Id>
        <Name>forcheng</Name>
        <Password>123456</Password>
        <IsAdmin>1</IsAdmin>
        <DateCreated>2016/03/22 16:08:00</DateCreated>
      </User>
      <User>
        <Id>2</Id>
        <Name>cheng</Name>
        <Password>123456789</Password>
        <IsAdmin>0</IsAdmin>
        <DateCreated>2016/03/24 12:08:30</DateCreated>
      </User>
    </Users>
    View Code

         通过上面的xml代码,我们知道了数据是如何保存在xml文件里面的。(在这里,你可以简单将一个xml文件看做一张数据表,每一个<user>...</user>元素看做是一条记录)

       下面的实例简单地展示一下如何对xml文件中的数据进行增、删、查、改操作:

    using System;
    using System.IO;
    using System.Xml.Linq;
    using System.Linq;
    
    namespace ConsoleApplication
    {
    
        class Program
        {
            //主函数
            static void Main(string[] args)
            {
                //如果不存在文件,则先创建
                if(!File.Exists("db.xml"))
                {
                    var xmlFile = new StreamWriter("db.xml");
                    xmlFile.WriteLine("<?xml version="1.0" encoding="utf-8"?>");
                    xmlFile.WriteLine("<Users>");
                    xmlFile.WriteLine("</Users>");
                    xmlFile.Close();
                }
    
                XElement xmlDoc = XElement.Load("db.xml");//载入db.xml文件,db.xml与可执行程序位于同一目录
    
                Console.WriteLine(xmlDoc.ToString());//输出显示数据
                Console.WriteLine();
                Console.ReadKey();
    
                ///给db.xml添加数据///
    
                //创建两条记录
                XElement newNode1 = new XElement("User",
                        new XElement("Id","3"),
                        new XElement("Name", ""),
                        new XElement("Password", "1234567"),
                        new XElement("IsAdmin", "1"),
                        new XElement("DateCreated", DateTime.Now.ToString())
                    );
                XElement newNode2 = new XElement("User",
                        new XElement("Id", "4"),
                        new XElement("Name", ""),
                        new XElement("Password", "12345678"),
                        new XElement("IsAdmin", "0"),
                        new XElement("DateCreated", DateTime.Now.ToString())
                    );
                xmlDoc.Add(newNode1);//添加记录newNode1
                xmlDoc.Add(newNode2);//添加记录newNode2,此时数据并未直接保存在db.xml文件里面而是保存在缓存或其他地方,想要将修改后的数据保存,需调用 Save() 方法
    
                //xmlDoc.Save("db.xml");保存修改到文件
                Console.WriteLine(xmlDoc.ToString());//输出显示数据
                Console.WriteLine();
                Console.ReadKey();
    
                ///修改db.xml里面的数据///
    
                var allUses = xmlDoc.Elements("User") ;//返回所有用户数据(引用)
    
                var first = allUses.First();//获取第一个元素 等价于allUses.ElementAt(0)
                first.Element("Name").Value = "小明";
    
                var second = allUses.ElementAt(1);//获取第二个元素
                second.Element("Password").Value = "123";
    
                //xmlDoc.Save("db.xml");保存修改到文件
                Console.WriteLine(xmlDoc.ToString());//输出显示数据
                Console.WriteLine();
                Console.ReadKey();
    
                ///遍历db.xml里面的数据///
                ///
                foreach (var item in xmlDoc.Elements("User"))
                {
                    Console.WriteLine(item.Element("Id").Value);
                    Console.WriteLine(item.Element("Name").Value);
                    Console.WriteLine(item.Element("Password").Value);
                    Console.WriteLine(item.Element("IsAdmin").Value);
                    Console.WriteLine(item.Element("DateCreated").Value);
                }
                Console.WriteLine();
    
                ///删除db.xml里面的数据///
    
                newNode1.Remove();//移除数据  等价于 first.Remove();  因为它们都是实例的引用
                newNode2.Remove();//移除数据  等价于 second.Remove();
                                  //上面两句也等价于 xmlDoc.RemoveAll(); 移除所有子节点和属性
    
                //xmlDoc.Save("db.xml");保存修改到文件
                Console.WriteLine(xmlDoc.ToString());//输出显示数据
                Console.ReadKey();
            }
        }
    }
    View Code

         看了上面的源代码的读者可能发现,源代码中并没有涉及以对象的方式来访问xml数据表,不用急。写上面的源代码主要目的有两个:(一)、展示一下对xml文件中的数据进行增、删、查、改等基本操作,让读者有一个大概了解。(二)、为了引出以对象的方式来访问xml数据表的方便和后期维护的高效性,大家看了上面的对xml元素的访问方式之后,是否觉得每次都要通过Element(value)去访问元素的值很不方便?。(可能没有用过xml文件作为数据库开发的并不会认为这有什么不方便之处)。

      那么我将在(二)、(三)中详细谈到为什么要用以对象的方式来访问xml数据表和怎样以对象的方式来访问xml数据表。

  • 相关阅读:
    InnoDB和MyISAM区别
    include和require的区别
    php的魔术方法
    php中heredoc的使用方法
    20条常见的编码陷阱
    php header 跳转
    php.ini设置详解
    session的实现原理 大网站应用应注意的问题
    Ruby on Rails 开发实践相关命令参考
    IBM WebSphere Portal6 最佳项目实践
  • 原文地址:https://www.cnblogs.com/forcheng/p/5309520.html
Copyright © 2011-2022 走看看