首页 | 下载中心 | 高手学院 | 视频教程 | 书籍教程 | 模板中心 | 空间评测 | 每日代理 | 站长服务 | 高手论坛 | 
XML专题文章收集整理 完结篇 作者:佚名    文章来源:不详    点击数:    更新时间:2005-1-30

 

扩展标记语言XML(eXtensible   Markup   Language),是由W3C组织制定的。做为用于替代HTML语言的一种新型的标记语言,XML内部有着很多基本标准,XML就是通过与这些相关标准地结合,应用于科学计算、电子出版、多媒体制作和电子商务的。C#作为一种新型的程序语言,是.Net框架的一个重要组成部分,他和XML的关系颇深。本文就从一个方面来探讨一下这二者的关系。即:看用C#如何来创建和读取XML文档。      

一.   本文程序设计和运行的软件环境:      

(一).微软公司视窗2000服务器版      

(二)..Net   FrameWork   SDK   Beta   2      

二.   C#创建XML文档:      

在本文中我们来介绍一下用C#创建XML文档的二种方法,这二种方法各有千秋,第一种创建起来更灵活,第二种创建起来更方便。      

(一).C#创建XML文档的第一种方法:      

这一种方法是按照按照XML的结构一步一步的构建XML文档。C#构建XML文档通过.Net   FrameWork   SDK中的命名空间"System.Xml"中封装的各种类来实现的。下面就按照一个XML典型文档结构来介绍一下。      

(1).首先要创建一个空的XML文档:      

在命名空间"System.Xml"中有一个类"XmlDocument",C#通过这个类来描述XML文档。下面是用C#创建一个XML文档。      


xmldoc   =   new   System.Xml.XmlDocument   (   )   ;      


(2).在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   )   ;   


(3).为XML文档加入元素(element):      

加入数据内容是通过元素,在"XmlDocument"类中提供了二个方法:"CreateElement"和"CreateTextNode"。其中第一个方法是在XML中创建一个元素,另外一个方法是为创建的元素指定文本值。下面是为上面创建的XML文档加入一个根元素。      


xmlelem   =   xmldoc.CreateElement   (   ""   ,   "ROOT"   ,   ""   )   ;   
xmltext   =   xmldoc.CreateTextNode   (   "Root   Text"   )   ;   
注释:其中"xmlelem"是创建的"XmlElement"对象,"xmltext"是"XmlText"对象      

有了创建一个XML元素的例子,就可以根据XML文档中数据的不同的结构来创建其他的数据了。      

(二).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   (   )   ;   
            }   
         }      


(三).C#创建XML文档的第二种方法:      

在介绍完第一种方法以后,我想每一个读者都感觉到用C#创建XML文档是一项比较烦杂的工作了,因为不仅要了解创建的知识,还要了解文档的结构,这样创建的过程就是一步一步的了。下面就来介绍一种比较容易的创建方法,这种创建方法是直接定义XML文档,然后把他保存到文件中就可以了。      

(1).创建一个XML文档:      

这一点和第一种方法一样,在这里就不介绍了。      

(2).通过"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>"   )   ;               


(3).把保存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包含三个数据,下面就来看如何读取这三条数据:      

(1).装入XML文件,形成数据流:      

通过创建一个"XmlDocument"对象,然后利用"load"方法,可以把XML文件装入,具体如下:      


XmlDocument   doc   =   new   XmlDocument   (   )   ;   
      //   装入指定的XML文档   
      doc.Load   (   "C:\\data.xml"   )   ;      
(2).读取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相关程序是十分必要的。



    XML专题文章收集整理 完结篇 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)  去网站高手技术论坛讨论...
文章录入:admin    责任编辑:admin         【发表评论】【告诉好友】【打印此文】【关闭窗口
  • 上一篇文章: XML专题文章收集整理 解析.Net框架下的XML编程技术
  •         
  • 下一篇文章: 媒体播放器SKIN制作全攻略