当前位置:首页 > 青鸟知识 > net

如何用C#创建和读取XML文件

来源:长沙it培训 发布日期:2017-03-28

  xml(可扩展标记语言)由3wc组织制定的,C#是一种新型的程式语言,是.net框架的一个组成部分,C#和XML有着密切的关系,本文将从如何用C#来创建和读取XML文件。

  在.net framework sdk中存在许多能直接操作xml的类库,掌控这些类库的使用方法,对用c#研发和xml相关程式是十分必要的。xml内部有着非常多基本标准,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_x"和"createtextnode"。其中第一个方法是在xml中创建一个元素,另外一个方法是为创建的元素指定文本值。下面是为上面创建的xml文件加入一个根元素。

  xmlelem = xmldoc.createElement_x ( "" , "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_x ( "" , "root" , "" ) ;

  xmltext = xmldoc.createtextnode ( "root text" ) ;

  xmlelem.appendchild ( xmltext ) ;

  xmldoc.appendchild ( xmlelem ) ;

  //加入另外一个元素

  xmlelem2 = xmldoc.createElement_x ("sampleelement" ) ;

  xmlelem2 = xmldoc.createElement_x ( "" , "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 (

  " " +

  "" +

  "ma jin hu" +

  " 239000 " +

  "

  feng huang street

  " +

  "chu zhou city" +

  " anhui " +

  "" +

  "" +

  "wang tian" +

  " 239000 " +

  "

  lang ya street

  " +

  "he fei city" +

  " anhui " +

  "" +

  "" +

  "zou wen biao" +

  " 100000 " +

  "

  sai di street

  " +

  "bei jin city" +

  "bei jin" +

  "" +

  "" ) ;

  (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 (

  " " +

  "" +

  "ma jin hu" +

  " 239000 " +

  "

  feng huang street

  " +

  "chu zhou city" +

  " anhui " +

  "" +

  "" +

  "wang tian" +

  " 239000 " +

  "

  lang ya street

  " +

  "he fei city" +

  " anhui " +

  "" +

  "" +

  "zou wen biao" +

  " 100000 " +

  "

  sai di street

  " +

  "bei jin city" +

  "bei jin" +

  "" +

  "" ) ;

  //保存这个文件到文件中

  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"文件的数据结构如下:

  ma jin hu

  239000

  feng huang street

  chu zhou city

  anhui

  wang tian

  239000

  lang ya street

  he fei city

  anhui

  zou wen biao

  100000

  sai di street

  bei jin city

  bei jin

  在下面的内容中,我们利用c#读取此文件,并用listview组件按照数据结构给显示出来。

  要正确读取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 ( ) ;

          }

     }

  }


拒绝套路 试听有礼

数据已加密保证您的信息安全