c#

位置:IT落伍者 >> c# >> 浏览文章

C#来创建和读取XML文档


发布日期:2020年05月28日
 
C#来创建和读取XML文档

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

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

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

(二)Net FrameWork SDK Beta

二.C#创建XML文档

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

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

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

)首先要创建一个空的XML文档

在命名空间SystemXml中有一个类XmlDocumentC#通过这个类来描述XML文档下面是用C#创建一个XML文档

xmldoc = new SystemXmlXmlDocument ( ) ;

)在XML的文档的最头部加入XML的声明段落

利用XmlDocument类中的CreateNode方法可以创建一个指定类型的XML节点CreateNode方法的调用方法总共有三种在本文中使用的是其一般的方法具体语法如下

XmlDocumentCreateNode Method ( XmlNodeType String String )

然后在利用XmlDocument类中的AppendChild方法在XML文档中加入此节点用C#在XML文档中加入声明段落实现的语句如下

xmlnode = xmldocCreateNode ( XmlNodeTypeXmlDeclaration ) ;

xmldocAppendChild ( xmlnode ) ;

)为XML文档加入元素(element)

加入数据内容是通过元素XmlDocument类中提供了二个方法

CreateElementCreateTextNode其中第一个方法是在XML中创建一个元素另外一个方法是为创建的元素指定文本值下面是为上面创建的XML文档加入一个根元素

xmlelem = xmldocCreateElement ( ROOT ) ;

xmltext = xmldocCreateTextNode ( Root Text ) ;

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

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

using System ;

using SystemXml ;

class MainClass

{

XmlDocument xmldoc ;

XmlNode xmlnode ;

XmlElement xmlelem ;

XmlElement xmlelem ;

XmlText xmltext ;

static void Main ( string [ ] args )

{

MainClass app = new MainClass ( ) ;

}

public MainClass ( )

{

xmldoc = new XmlDocument ( ) ;

//加入XML的声明段落

xmlnode = xmldocCreateNode ( XmlNodeTypeXmlDeclaration ) ;

xmldocAppendChild ( xmlnode ) ;

//加入一个根元素

xmlelem = xmldocCreateElement ( ROOT ) ;

xmltext = xmldocCreateTextNode ( Root Text ) ;

xmlelemAppendChild ( xmltext ) ;

xmldocAppendChild ( xmlelem ) ;

//加入另外一个元素

xmlelem = xmldocCreateElement (SampleElement ) ;

xmlelem = xmldocCreateElement ( SampleElement ) ;

xmltext = xmldocCreateTextNode ( The text of the sample element ) ;

xmlelemAppendChild ( xmltext ) ;

xmldocChildNodesItem()AppendChild ( xmlelem ) ;

//保存创建好的XML文档

try

{

xmldocSave ( c:\\dataxml ) ;

}

catch ( Exception e )

{

//显示错误信息

ConsoleWriteLine ( eMessage ) ;

}

ConsoleReadLine ( ) ;

}

}

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

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

)创建一个XML文档

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

)通过XmlDocument类中的LoadXml方法直接在文档中加入想要加入的XML数据当然你加入的XML应该符合XML的语法不然产生的文件也没有什么意义了下面是加入XML的具体代码

docLoadXml (

+

+

Ma Jin Hu +

+

Feng Huang Street +

Chu Zhou City +

ANHUI +

+

+

Wang Tian +

+

Lang Ya Street +

He Fei City +

ANHUI +

+

+

Zou Wen Biao +

+

Sai Di Street +

Bei Jin City +

Bei Jin +

+

) ;

)把保存XML文档到文件中

保存XML文档是通过XmlDocument类中的Save

方法来实现的具体如下

docSave ( dataxml ) ;

(四)C#创建XML文档的第二种方法的源程序代码(NOcs)

using System ;

using SystemIO ;

using SystemXml;

public class Sample

{

public static void Main ( )

{

//创建一个XmlDocument对象

XmlDocument doc = new XmlDocument ( ) ;

docLoadXml (

+

+

Ma Jin Hu +

+

Feng Huang Street +

Chu Zhou City +

ANHUI +

+

+

Wang Tian +

+

Lang Ya Street +

He Fei City +

ANHUI +

+

+

Zou Wen Biao +

+

Sai Di Street +

Bei Jin City +

Bei Jin +

+

) ;

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

docSave ( dataxml ) ;

}

}

用C#创建XML文档的方法其实有很多在这里只是选取了二种比较典型的方法加以介绍但无论那一种方法C#在创建XML的时候都需要用到Net FrameWork SDK所以了解并掌握这个类库中的内容对于C#编程是十分必要的在下面我们将来介绍一下用C#读取XML中的数据通过这你会发现C#又是利用这个类库实现这个功能的

三.C#读取XML文件

本节将用C#来读取本文中用第二种方法创建的XML文件编译NOcs后执行将产生dataxml文件其中dataxml文件的数据结构如下

Ma Jin Hu

Feng Huang Street

Chu Zhou City

ANHUI

Wang Tian

Lang Ya Street

He Fei City

ANHUI

Zou Wen Biao

Sai Di Street

Bei Jin City

Bei Jin

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

要正确读取XML数据首先要了解XML的结构根据上面的XML文件可以知道此XML包含三个数据下面就来看如何读取这三条数据

)装入XML文件形成数据流

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

XmlDocument doc = new XmlDocument ( ) ;

// 装入指定的XML文档

docLoad ( C:\\dataxml ) ;

)读取XML文件并显示出来

读取XML是通过创建XmlNodeReader对象来实现的XmlNodeReader对象主要是用来可以读取XML的节点数据在本文的程序中使用到了一些XmlNodeReader的属性譬如NodeType属性用来判断读取得节点是什么类型Value是节点的值下面是读取XML文件并显示在ListView中的实现代码其中listview是已经创建ListView组件

while ( readerRead ( ) )

{

//判断当前读取得节点类型

switch ( readerNodeType )

{

case XmlNodeTypeElement :

s = readerName ;

break ;

case XmlNodeTypeText :

if ( sEquals ( Name ) )

myItem = ListviewItemsAdd ( readerValue ) ;

else

myItemSubItemsAdd ( readerValue ) ;

break ;

}

}

C#读取XML的文件的源程序代码(readcs)

在了解了上面的内容以后

可以得到用C#读取指定XML文件的完整代码具体如下

using System ;

using SystemDrawing ;

using SystemCollections ;

using SystemComponentModel ;

using SystemWindowsForms ;

using SystemData ;

using SystemXml ;

public class Form : Form

{

private Button button ;

private ListView Listview ;

private SystemComponentModelContainer components = null ;

public Form ( )

{

//初始化窗体中的各个组件

InitializeComponent ( ) ;

}

//清除程序中使用过的资源

protected override void Dispose ( bool disposing )

{

if ( disposing )

{

if ( components != null )

{

componentsDispose ( ) ;

}

}

baseDispose ( disposing ) ;

}

private void InitializeComponent ( )

{

button = new Button ( ) ;

Listview = new ListView ( ) ;

SuspendLayout ( ) ;

buttonAnchor = ( ( AnchorStylesBottom | AnchorStylesLeft )

| AnchorStylesRight ) ;

buttonLocation = new Point ( ) ;

buttonName = button ;

buttonSize = new Size ( ) ;

buttonTabIndex = ;

buttonText = 读取XML文档 ;

buttonClick += new SystemEventHandler ( button_Click ) ;

ListviewAnchor = ( ( ( AnchorStylesTop | AnchorStylesBottom )

| AnchorStylesLeft )

| AnchorStylesRight ) ;

ListviewGridLines = true ;

ListviewLocation = new Point ( ) ;

ListviewName = Listview ;

ListviewSize = new Size ( ) ;

ListviewTabIndex = ;

ListviewView = ViewDetails ;

thisAutoScaleBaseSize = new Size ( ) ;

thisClientSize = new Size ( ) ;

thisControlsAdd ( Listview );

thisControlsAdd ( button );

thisName = Form ;

thisStartPosition = FormStartPositionCenterScreen ;

thisText = 用C#来读取XML文档 ;

thisResumeLayout ( false ) ;

}

static void Main ( )

{

ApplicationRun ( new Form ( ) ) ;

}

private void button_Click ( object sender SystemEventArgs e )

{

ListViewItem myItem = new ListViewItem ( ) ;

// 构建listview组件

ListviewColumnsClear ( ) ;

ListviewItemsClear ( ) ;

ListviewColumnsAdd ( Name HorizontalAlignmentLeft ) ;

ListviewColumnsAdd ( Zip HorizontalAlignmentLeft ) ;

ListviewColumnsAdd ( Address HorizontalAlignmentLeft ) ;

ListviewColumnsAdd ( City HorizontalAlignmentLeft ) ;

ListviewColumnsAdd ( State HorizontalAlignmentLeft ) ;

XmlNodeReader reader = null ;

try

{

string s = ;

XmlDocument doc = new XmlDocument ( ) ;

// 装入指定的XML文档

docLoad ( C:\\dataxml ) ;

// 设定XmlNodeReader对象来打开XML文件

reader = new XmlNodeReader ( doc ) ;

// 读取XML文件中的数据并显示出来

while ( readerRead ( ) )

{

//判断当前读取得节点类型

switch ( readerNodeType )

{

case XmlNodeTypeElement :

s = readerName ;

break ;

case XmlNodeTypeText :

if ( sEquals ( Name ) )

myItem = ListviewItemsAdd ( readerValue ) ;

else

myItemSubItemsAdd ( readerValue ) ;

break ;

}

}

}

finally

{

//清除打开的数据流

if ( reader != null )

readerClose ( ) ;

}

}

}

五.总结

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

               

上一篇:.NET上根据字符串动态创建控件

下一篇:c#中英文混合字符串截取指定长度