DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 讀寫一般格式的XML文件
讀寫一般格式的XML文件
編輯:XML詳解     
把數據都一次性存入數據庫固然好,但是設想如果用戶運行系統的計算機沒有接入網絡,即根本建立不了與數據庫的連接,那該怎麼辦?總不能不要數據了任由其丟失吧。於是此時本地數據文件變的尤為重要,她們成為承載數據的媒介。不過選擇存儲數據的文件格式需要仔細周全的考慮,在存儲和讀取數據文件的過程中,不同的文件格式會給程序的性能帶來不同的影響。

  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分配一塊區域

}


XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved