posts - 5,  comments - 5,  trackbacks - 0
          擴展標記語言xml(extensible markup language),是由w3c組織制定的。做為用于替代html語言的一種新型的標記語言,xml內部有著很多基本標準,xml就是通過與這些相關標準地結合,應用于科學計算、電子出版、多媒體制作和電子商務的。c#作為一種新型的程序語言,是.net框架的一個重要組成部分,他和xml的關系頗深。本文就從一個方面來探討一下這二者的關系。即:看用c#如何來創建和讀取xml文檔。?

            一. 本文程序設計和運行的軟件環境:?
            1.微軟公司視窗2000服務器版?
            2..net framework sdk beta 2?

            二. c#創建xml文檔:?
            在本文中我們來介紹一下用c#創建xml文檔的二種方法,這二種方法各有千秋,第一種創建起來更靈活,第二種創建起來更方便。?
            1.c#創建xml文檔的第一種方法:?
            這一種方法是按照按照xml的結構一步一步的構建xml文檔。c#構建xml文檔通過.net framework sdk中的命名空間"system.xml"中封裝的各種類來實現的。下面就按照一個xml典型文檔結構來介紹一下。?
          ??? ◇首先要創建一個空的xml文檔:?
            在命名空間"system.xml"中有一個類"xmldocument",c#通過這個類來描述xml文檔。下面是用c#創建一個xml文檔。?
          xmldoc = new system.xml.xmldocument ( ) ;?


            ◇在xml的文檔的最頭部加入xml的聲明段落:?
            利用"xmldocument"類中的 "createnode" 方法可以創建一個指定類型的xml節點,"createnode" 方法的調用方法總共有三種,在本文中使用的其一般的方法,具體語法如下:?

          xmldocument.createnode method ( xmlnodetype , string , string )?


            然后在利用"xmldocument"類中的"appendchild"方法在xml文檔中加入此節點,用c#在xml文檔中加入聲明段落實現的語句如下:?

          xmlnode = xmldoc.createnode ( xmlnodetype.xmldeclaration , "" , "" ) ;
          xmldoc.appendchild ( xmlnode ) ;


            ◇為xml文檔加入元素(element):?
            加入數據內容是通過元素,在"xmldocument"類中提供了二個方法:"createelement"和"createtextnode"。其中第一個方法是在xml中創建一個元素,另外一個方法是為創建的元素指定文本值。下面是為上面創建的xml文檔加入一個根元素。?

          xmlelem = xmldoc.createelement ( "" , "root" , "" ) ;
          xmltext = xmldoc.createtextnode ( "root text" ) ;


            注釋:其中"xmlelem"是創建的"xmlelement"對象,"xmltext"是"xmltext"對象?
            有了創建一個xml元素的例子,就可以根據xml文檔中數據的不同的結構來創建其他的數據了。?

          ??? 2.c#創建xml文檔的第一種方法的源程序代碼(no1.cs):?

          using system ;
          using system.xml ;
          class mainclass
          {
          xmldocument xmldoc ;
          xmlnode xmlnode ;
          xmlelement xmlelem ;
          xmlelement xmlelem2 ;
          xmltext xmltext ;

          static void main ( string [ ] args )
          {
          mainclass app = new mainclass ( ) ;
          }
          public mainclass ( )

          {
          xmldoc = new xmldocument ( ) ;
          //加入xml的聲明段落
          xmlnode = xmldoc.createnode ( xmlnodetype.xmldeclaration , "" , "" ) ;
          xmldoc.appendchild ( xmlnode ) ;
          //加入一個根元素
          xmlelem = xmldoc.createelement ( "" , "root" , "" ) ;
          xmltext = xmldoc.createtextnode ( "root text" ) ;
          xmlelem.appendchild ( xmltext ) ;
          xmldoc.appendchild ( xmlelem ) ;
          //加入另外一個元素
          xmlelem2 = xmldoc.createelement ("sampleelement" ) ;
          xmlelem2 = xmldoc.createelement ( "" , "sampleelement" , "" ) ;
          xmltext = xmldoc.createtextnode ( "the text of the sample element" ) ;
          xmlelem2.appendchild ( xmltext ) ;
          xmldoc.childnodes.item(1).appendchild ( xmlelem2 ) ;
          //保存創建好的xml文檔
          try

          {
          xmldoc.save ( "c:\\data.xml" ) ;?
          }
          catch ( exception e )
          {
          //顯示錯誤信息
          console.writeline ( e.message ) ;
          }
          console.readline ( ) ;
          }
          }?

           

          ??? 3.c#創建xml文檔的第二種方法:?
          ??? 在介紹完第一種方法以后,我想每一個讀者都感覺到用c#創建xml文檔是一項比較煩雜的工作了,因為不僅要了解創建的知識,還要了解文檔的結構,這樣創建的過程就是一步一步的了。下面就來介紹一種比較容易的創建方法,這種創建方法是直接定義xml文檔,然后把他保存到文件中就可以了。?
          ??? ◇創建一個xml文檔:?
          ??? 這一點和第一種方法一樣,在這里就不介紹了。?

            ◇通過"xmldocument"類中的"loadxml"方法,直接在文檔中加入想要加入的xml數據。當然你加入的xml應該符合xml的語法,不然產生的文件也沒有什么意義了。下面是加入xml的具體代碼:?

          doc.loadxml (?
          "<employees> " +
          "<no1>" +
          "<name>ma jin hu</name>" +
          "<zip> 239000 </zip>" +
          "<address>feng huang street</address>" +
          "<city>chu zhou city</city>" +
          "<state> anhui </state>" +
          "</no1>" +
          "<no2>" +
          "<name>wang tian</name>" +
          "<zip> 239000 </zip>" +
          "<address>lang ya street</address>" +
          "<city>he fei city</city>" +
          "<state> anhui </state>" +
          "</no2>" +
          "<no3>" +
          "<name>zou wen biao</name>" +
          "<zip> 100000 </zip>" +
          "<address>sai di street</address>" +
          "<city>bei jin city</city>" +
          "<state>bei jin</state>" +
          "</no3>" +
          "</employees>" ) ;?

            把保存xml文檔到文件中:?
            保存xml文檔是通過"xmldocument"類中的"save"方法來實現的。具體如下:?

          doc.save ( "data.xml" ) ;?


            ◇c#創建xml文檔的第二種方法的源程序代碼(no2.cs):?

          using system ;
          using system.io ;
          using system.xml;
          public class sample
          {
          public static void main ( )
          {
          //創建一個xmldocument對象
          xmldocument doc = new xmldocument ( ) ;
          doc.loadxml (?
          "<employees> " +
          "<no1>" +
          "<name>ma jin hu</name>" +
          "<zip> 239000 </zip>" +
          "<address>feng huang street</address>" +
          "<city>chu zhou city</city>" +
          "<state> anhui </state>" +
          "</no1>" +
          "<no2>" +
          "<name>wang tian</name>" +
          "<zip> 239000 </zip>" +
          "<address>lang ya street</address>" +
          "<city>he fei city</city>" +
          "<state> anhui </state>" +
          "</no2>" +
          "<no3>" +
          "<name>zou wen biao</name>" +
          "<zip> 100000 </zip>" +
          "<address>sai di street</address>" +
          "<city>bei jin city</city>" +
          "<state>bei jin</state>" +
          "</no3>" +
          "</employees>" ) ;
          //保存這個文檔到文件中
          doc.save ( "data.xml" ) ;
          }
          }?


          ??? 用c#創建xml文檔的方法其實有很多,在這里只是選取了二種比較典型的方法加以介紹。但無論那一種方法,c#在創建xml的時候都需要用到.net framework sdk。所以了解并掌握這個類庫中的內容對于c#編程是十分必要的,在下面我們將來介紹一下用c#讀取xml中的數據,通過這你會發現,c#又是利用這個類庫實現這個功能的。?

          ??? .c#讀取xml文件:?
            本節將用c#來讀取本文中用第二種方法創建的xml文件,編譯no2.cs后,執行將產生"data.xml"文件,其中"data.xml"文件的數據結構如下:?

          <employees>
          <no1>
          <name>ma jin hu</name>
          <zip> 239000 </zip>
          <address>feng huang street</address>
          <city>chu zhou city</city>
          <state> anhui </state>
          </no1>
          <no2>
          <name>wang tian</name>
          <zip> 239000 </zip>
          <address>lang ya street</address>
          <city>he fei city</city>
          <state> anhui </state>
          </no2>
          <no3>
          <name>zou wen biao</name>
          <zip> 100000 </zip>
          <address>sai di street</address>
          <city>bei jin city</city>
          <state>bei jin</state>
          </no3>
          </employees>?

             在下面的內容中,我們利用c#讀取此文件,并用listview組件按照數據結構給顯示出來。下圖是讀取此xml后的運行界面:?
            圖01:c#讀取xml后的運行界面?
                      

            要正確讀取xml數據,首先要了解xml的結構。根據上面的xml文件,可以知道此xml包含三個數據,下面就來看如何讀取這三條數據:?

            ◇裝入xml文件,形成數據流:?
            通過創建一個"xmldocument"對象,然后利用"load"方法,可以把xml文件裝入,具體如下:?

          xmldocument doc = new xmldocument ( ) ;
          // 裝入指定的xml文檔
          doc.load ( "c:\\data.xml" ) ;?


            ◇讀取xml文件,并顯示出來:?
            讀取xml是通過創建"xmlnodereader"對象來實現的,"xmlnodereader"對象主要是用來可以讀取xml的節點數據。在本文的程序中使用到了一些"xmlnodereader"的屬性,譬如"nodetype"屬性,用來判斷讀取得節點是什么類型。"value"是節點的值。下面是讀取xml文件并顯示在listview中的實現代碼,其中listview1是已經創建listview組件:?

          while ( reader.read ( ) )?
          {
          //判斷當前讀取得節點類型
          switch ( reader.nodetype )
          {
          case xmlnodetype.element :
          s = reader.name ;
          break ;
          case xmlnodetype.text :
          if ( s.equals ( "name" ) )
          myitem = listview1.items.add ( reader.value ) ;
          else
          myitem.subitems.add ( reader.value ) ;
          break ;
          }?
          }?


            四.c#讀取xml的文件的源程序代碼(read.cs):?
            在了解了上面的內容以后,可以得到用c#讀取指定xml文件的完整代碼,具體如下:?

          using system ;
          using system.drawing ;
          using system.collections ;
          using system.componentmodel ;
          using system.windows.forms ;
          using system.data ;
          using system.xml ;
          public class form1 : form
          {
          private button button1 ;
          private listview listview1 ;
          private system.componentmodel.container components = null ;

          public form1 ( )
          {
          //初始化窗體中的各個組件
          initializecomponent ( ) ;
          }
          //清除程序中使用過的資源
          protected override void dispose ( bool disposing )
          {
          if ( disposing )
          {
          if ( components != null )?
          {
          components.dispose ( ) ;
          }
          }
          base.dispose ( disposing ) ;
          }
          private void initializecomponent ( )
          {
          button1 = new button ( ) ;
          listview1 = new listview ( ) ;
          suspendlayout ( ) ;

          button1.anchor = ( ( anchorstyles.bottom | anchorstyles.left )?
          | anchorstyles.right ) ;
          button1.location = new point ( 240 , 296 ) ;
          button1.name = "button1" ;
          button1.size = new size ( 112 , 37 ) ;
          button1.tabindex = 0 ;
          button1.text = "讀取xml文檔" ;
          button1.click += new system.eventhandler ( button1_click ) ;

          listview1.anchor = ( ( ( anchorstyles.top | anchorstyles.bottom )?
          | anchorstyles.left )?
          | anchorstyles.right ) ;
          listview1.gridlines = true ;
          listview1.location = new point ( 10 , 9 ) ;
          listview1.name = "listview1" ;
          listview1.size = new size ( 623 , 269 ) ;
          listview1.tabindex = 1 ;
          listview1.view = view.details ;

          this.autoscalebasesize = new size ( 6 , 14 ) ;
          this.clientsize = new size ( 608 , 348 ) ;
          this.controls.add ( listview1 );
          this.controls.add ( button1 );
          this.name = "form1" ;
          this.startposition = formstartposition.centerscreen ;
          this.text = "用c#來讀取xml文檔" ;
          this.resumelayout ( false ) ;

          }
          static void main ( )?
          {
          application.run ( new form1 ( ) ) ;
          }

          private void button1_click ( object sender , system.eventargs e )
          {
          listviewitem myitem = new listviewitem ( ) ;
          // 構建listview組件
          listview1.columns.clear ( ) ;?
          listview1.items.clear ( ) ;
          listview1.columns.add ( "name" , 80 , horizontalalignment.left ) ;?
          listview1.columns.add ( "zip" , 80 , horizontalalignment.left ) ;?
          listview1.columns.add ( "address" , 80 , horizontalalignment.left ) ;?
          listview1.columns.add ( "city" , 80 , horizontalalignment.left ) ;?
          listview1.columns.add ( "state" , 80 , horizontalalignment.left ) ;?
          xmlnodereader reader = null ;

          try
          {
          string s = "" ;
          xmldocument doc = new xmldocument ( ) ;
          // 裝入指定的xml文檔
          doc.load ( "c:\\data.xml" ) ;
          // 設定xmlnodereader對象來打開xml文件
          reader = new xmlnodereader ( doc ) ;
          // 讀取xml文件中的數據,并顯示出來
          while ( reader.read ( ) )?
          {
          //判斷當前讀取得節點類型
          switch ( reader.nodetype )
          {
          case xmlnodetype.element :
          s = reader.name ;
          break ;
          case xmlnodetype.text :
          if ( s.equals ( "name" ) )
          myitem = listview1.items.add ( reader.value ) ;
          else
          myitem.subitems.add ( reader.value ) ;
          break ;
          }?
          }
          }
          finally
          {
          //清除打開的數據流
          if ( reader != null )
          reader.close ( ) ;
          }
          }
          }?


            五.總結:?
            c#和xml的淵源是很深的,本文只是從一個側面反映了二者關系的密切程度。在.net framework sdk中存在許多可以直接操作xml的類庫,掌握這些類庫的使用方法,對用c#開發和xml相關程序是十分必要的。?

          posted on 2006-11-12 15:17 曾科 閱讀(727) 評論(0)  編輯  收藏 所屬分類: C#
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          .net

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 祁连县| 蒙阴县| 绥滨县| 江油市| 桐庐县| 瓦房店市| 灵台县| 夏津县| 朝阳县| 南岸区| 石渠县| 壤塘县| 青川县| 彭阳县| 库车县| 沙坪坝区| 平塘县| 荔波县| 吉安县| 阳高县| 香港 | 宁明县| 九江市| 安陆市| 大丰市| 维西| 安岳县| 丽水市| 奎屯市| 会理县| 文成县| 东乡| 芜湖县| 马关县| 河津市| 平舆县| 库尔勒市| 江阴市| 会同县| 息烽县| 马公市|