艾伟_转载:C#来创建和读取XML文档

简介:   扩展标记语言XML(eXtensible Markup Language),是由W3C组织制定的。做为用于替代HTML语言的一种新型的标记语言,XML内部有着很多基本标准,XML就是通过与这些相关标准地结合,应用于科学计算、电子出版、多媒体制作和电子商务的。

  扩展标记语言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 ( ) ;
  }
}

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

注释:其中“xmlelem”是创建的“XmlElement”对象,“xmltext”是“XmlText”对象有了创建一个XML元素的例子,就可以根据XML文档中数据的不同的结构来创建其他的数据了。

  (二)C#创建XML文档的第一种方法的源程序代码(NO1.cs)

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

  五.总结
  C#和XML的渊源是很深的,本文只是从一个侧面反映了二者关系的密切程度。在.Net FrameWork SDK中存在许多可以直接操作XML的类库,掌握这些类库的使用方法,对用C#开发和XML相关程序是十分必要的。

目录
相关文章
|
7月前
|
XML 存储 JavaScript
DOM 节点遍历:掌握遍历 XML文档结构和内容的技巧
**XML DOM 遍历、操作和导航概述** - 遍历XML节点树用于提取信息,例如,通过JavaScript的DOM API循环`<book>`子节点显示名称和值。 - DOM解析器处理XML文本数据,包括解析字符数据(PCDATA)和识别CDATA段。 - 节点导航涉及`parentNode`、`childNodes`等属性,`get_nextSibling`等辅助函数避免空文本节点。 - `getElementsByTagName`、`getAttribute`和`nodeValue`用于检索元素、属性值和文本。
100 6
DOM 节点遍历:掌握遍历 XML文档结构和内容的技巧
|
7月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
|
4月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
182 7
使用Java和XPath在XML文档中精准定位数据
|
3月前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
197 61
C# 中的 XML 与 JSON 数据处理
|
1月前
|
XML C# 开发工具
C# 删除Word文档中的段落
【11月更文挑战第3天】本文介绍了两种方法来操作 Word 文档:一是使用 `Microsoft.Office.Interop.Word` 库,适用于 Windows 环境下操作 Word 文档,需引用相应库并在代码中引入命名空间;二是使用 Open XML SDK,适用于处理 .docx 格式的文档,通过引用 `DocumentFormat.OpenXml` 库实现。文中提供了示例代码,展示了如何打开、删除段落并保存文档。
|
2月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
116 0
|
2月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
570 0
|
7月前
|
XML 存储 C#
C# xml文档反序列化记事
本文介绍了使用XmlSerializer进行XML序列化和反序列化的关键点。包括:1) 以独占方式读取XML文件以避免并发问题;2) 当元素名与类型名不一致时,可通过`[XmlArrayItem]`指定元素名,或创建继承自原始类型的子类;3) 处理DateTime反序列化错误,通过中间字符串属性转换;4) 提到了常用C#特性如`[XmlRoot]`, `[XmlElement]`, `[XmlAttribute]`, `[XmlIgnore]`和`[XmlArrayItem]`的作用。
|
7月前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
99 1
|
7月前
|
XML JavaScript 前端开发
XML文档节点导航与选择指南
XPath是XSLT的核心部分,用于XML文档的节点定位和选择。它采用路径表达式语法,包含200多个内置函数处理各种数据类型。XPath在编程语言如JavaScript中广泛使用,与XSLT配合进行XML转换和样式处理。它涉及7种节点类型,如元素、属性和文本,以及多种节点间关系,如父、子、同级等。XPath还使用轴(如ancestor、child)来描述节点间的关联,并支持运算符进行逻辑和数学操作。
99 0
XML文档节点导航与选择指南