c#来创建和读取xml文档

  扩展标记语言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相关程序是十分必要的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值