欢迎光临
我们一直在努力

读写一般格式的XML文件-.NET教程,XML应用

建站超值云服务器,限时71元/月
把数据都一次性存入数据库固然好,但是设想如果用户运行系统的计算机没有接入网络,即根本建立不了与数据库的连接,那该怎么办?总不能不要数据了任由其丢失吧。于是此时本地数据文件变的尤为重要,她们成为承载数据的媒介。不过选择存储数据的文件格式需要仔细周全的考虑,在存储和读取数据文件的过程中,不同的文件格式会给程序的性能带来不同的影响。
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();

                                 this.geobj.flagorder = “drawrectangle”;

                                 break;

                            case “drawellipse”:

                                 this.geobj = new cellipse();

                                 this.geobj.flagorder = “drawellipse”;

                                 break;

                            case “drawarc”:

                                 this.geobj = new carc();

                                 this.geobj.flagorder = “drawarc”;

                                 break;

                       }

                                     ////////////////////////////////////////////////////////////////////////////

              }

              if(xtr.isstartelement(“x”))//ptdrawstart.x

              {

                   this.geobj.ptdrawstart.x = int32.parse(xtr.readelementstring(“x”).tostring());

              }

              if(xtr.isstartelement(“y”))//ptdrawstart.y

              {

                   this.geobj.ptdrawstart.y = int32.parse(xtr.readelementstring(“y”).tostring());

              }

              if(xtr.isstartelement(“x1”))//ptdrawend.x

              {

                   this.geobj.ptdrawend.x = int32.parse(xtr.readelementstring(“x1”).tostring());

              }

              if(xtr.isstartelement(“y1”))//ptdrawend.y

              {

                   this.geobj.ptdrawend.y = int32.parse(xtr.readelementstring(“y1”).tostring());

              }

              if(xtr.isstartelement(“lw”))//lw

              {

                   this.geobj.gelw = int32.parse(xtr.readelementstring(“lw”).tostring());

              }


              if(xtr.isstartelement(“r”))//r

              {

                   this.geobj.r = int32.parse(xtr.readelementstring(“r”).tostring());

              }

              if(xtr.isstartelement(“g”))//g

              {

                   this.geobj.g = int32.parse(xtr.readelementstring(“g”).tostring());

              }

              if(xtr.isstartelement(“b”))//b

              {

                   this.geobj.b = int32.parse(xtr.readelementstring(“b”).tostring());

              }

              break;

         }

         case xmlnodetype.endelement://读取该图素结束

         {

              if(xtr.name.tostring().equals(“gee”))

              {

                   this.gelist2d.add(geobj);//一个图素完成

              }

              break;

              }

         }

     }

     gelist1d.add(gelist2d);//完成一个gelist2d,将之加入gelist1d,即读完一个图元文件

     xtr.close();//关键必须关闭,否则独占文件就写不进去

     gelist2d = new arraylist();//重新再为gelist2d分配一块区域

}


赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 读写一般格式的XML文件-.NET教程,XML应用
分享到: 更多 (0)