日期:2014-03-18  浏览次数:21001 次

  把数据都一次性存入数据库固然好,但是设想如果用户运转系统的计算机没有接入网络,即基本建立不了与数据库的连接,那该怎样办?总不能不要数据了任由其丢失吧。于是此时本地数据文件变的尤为重要,她们成为承载数据的媒介。不过选择存储数据的文件格式需求细心周全的考虑,在存储和读取数据文件的过程中,不同的文件格式会给程序的功用带来不同的影响。

  XML(extensible markup language)文件作为与数据库联系最紧密的文件格式日益遭到程序员的青睐,让我们看看它的优点:

  【1】当被用来描述数据库时,XML 拥有两项凌驾于专有格式(如Access .mdb 或dBase .dbf 格式)的优点:XML 是人类易读的,而且它是依据众所周知、开放式的标准所建立的。

  【2】XML描述数据本身。由于数据显示与内容分开,XML定义的数据允许指定不同的显示方式,使数据更合理地表现出来。本地的数据能够以客户配置、使用者选择或其他标准决定的方式动态地表现出来。

  【3】XML具有较好的保值性。XML的保值性来自它的先驱之一——SGML言语。SGML是一套有着十几年历史的国际标准,它最后设计的一大目标就是要为文件提供50年以上的寿命。

  而且从XML文件向数据库里导入数据并不是一件难事,所以选取XML文件做为数据的承载是非常好的选择。

(XML的读取实例)

XML遵照严厉的语法要求,例如一个XML文件格式如下:

<ge name="电压表">           图元的名称

  <gee>            一个图素数据的开始

    <flagOrder>DrawLine</flagOrder>

    <X>67</X>

    <Y>23</Y>

    <X1>37</X1>

    <Y1>77</Y1>

    <lw>1</lw>

    <R>0</R>

    <G>0</G>

    <B>0</B>

  </gee>           一个图素数据的结束

  <gee>

    <flagOrder>DrawRectangle</flagOrder>

    <X>85</X>

    <Y>76</Y>

    <X1>30</X1>

    <Y1>36</Y1>

    <lw>1</lw>

    <R>0</R>

    <G>0</G>

    <B>0</B>

  </gee>

  <gee>

    <flagOrder>DrawEllipse</flagOrder>

    <X>30</X>

    <Y>7</Y>

    <X1>70</X1>

    <Y1>46</Y1>

    <lw>1</lw>

    <R>0</R>

    <G>0</G>

    <B>0</B>

  </gee>

</ge>


(写这个实例XML文件的代码:)

      for(int i=0;i< GEList2D.Count;i++)//将某一个图元中的图素数据顺次写入XML文件

          {

            GEObj = (CGE)GEList2D[i];

            //对图元中的图素数据进行等比例缩小比例是4:1

            GEObj.ptDrawStart.X = GEObj.ptDrawStart.X/4;

            GEObj.ptDrawStart.Y = GEObj.ptDrawStart.Y/4;

            GEObj.ptDrawEnd.X = GEObj.ptDrawEnd.X/4;

            GEObj.ptDrawEnd.Y = GEObj.ptDrawEnd.Y/4;

            writer.WriteStartElement("gee");

         writer.WriteElementString("flagOrder",GEObj.flagOrder.ToString());

            writer.WriteElementString("X",GEObj.ptDrawStart.X.ToString());

            writer.WriteElementString("Y",GEObj.ptDrawStart.Y.ToString());

            writer.WriteElementString("X1",GEObj.ptDrawEnd.X.ToString());

            writer.WriteElementString("Y1",GEObj.ptDrawEnd.Y.ToString());

            writer.WriteElementString("lw",GEObj.GElw.ToString());

            writer.WriteElementString("R",GEObj.R.ToString());

            writer.WriteElementString("G",GEObj.R.ToString());

            writer.WriteElementString("B",GEObj.R.ToString());

            writer.WriteEndElement();

          }

        writer.WriteEndElement();

(写这个实例XML文件的代码:)

while(xtr.Read())

     {

       switch(xtr.NodeType)

       {

          case XmlNodeType.Element:

          {

            if(xtr.IsStartElement("ge"))

            {

        this.GEName[i] = xtr.GetAttribute("name").ToString();//获取图元名称

            }

            if(xtr.IsStartElement("gee"))//开始读取一个图素

            {}

            if(xtr.IsStartElement("flagOrder"))//flagOrder

            {

    switch(xtr.ReadElementString("flagOrder"))//依据不同的命令标志位建立不同的对象

             {

              case "DrawLine":

                 this.GEObj = new CLine();

             this.GEObj.flagOrder = "DrawLine";//留意要在这里赋值

                 break;

              case "DrawRectangle":

                 this.GEObj = new CRectangle();

<