手把手教你C#读取XML文件

来源:互联网 发布:java读取hdfs文件内容 编辑:程序博客网 时间:2024/05/22 13:15

C#读取XML资料




一 C#读取XML资料

扩充标记语言XML(eXtensible Markup Language),是由W三C机关制订的。做为用以代替HTML语言的一种新式的标记语言,XML内部有着很多根本基准,XML乃是经过与这些相干基准地组合,应用于科学计算、电子出版、多媒体系体例作和电子商务的。C#作为一种新式的程序语言,是.Net构架的一个主要组成部分,他和XML的关系颇深。正文就从一个方面来研讨一下子这彼此的关系。即:观用C#何以来创造和读取XML文档。

1. 正文程序设计和运作的软件环境:

(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文档中数据的不同的构造来创设其余的数据了。


using System ;

using System.Xml ;

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 = xmldoc.CreateNode ( XmlNodeType.XmlDeclaration , "" , "" ) ;

xmldoc.AppendChild ( xmlnode ) ;

//加入一个根元素

xmlelem = xmldoc.CreateElement ( "" , "ROOT" , "" ) ;

xmltext = xmldoc.CreateTextNode ( "Root Text" ) ;

xmlelem.AppendChild ( xmltext ) ;

xmldoc.AppendChild ( xmlelem ) ;

//加入此外一个元素

xmlelem二 = xmldoc.CreateElement ("SampleElement" ) ;

xmlelem二 = xmldoc.CreateElement ( "" , "SampleElement" , "" ) ;

xmltext = xmldoc.CreateTextNode ( "The text of the sample element" ) ;









--------------------------------------------------------------------------------



C#读取XML资料

xmldoc.ChildNodes.Item(一).AppendChild ( xmlelem二 ) ;

//封存创设好的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 (

" " +

"" +

"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" +

"" +

"" ) ;


封存XML文档是经过"XmlDocument"种中的"Save"步骤来兑现的。具体如次:

doc.Save ( "data.xml" ) ;

(4).C#创设XML文档的第二种步骤的源程序代码(NO二.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" +

"" +

"" ) ;

//封存这个文档到资料中

doc.Save ( "data.xml" ) ;

}

}

用C#创办XML文档的步骤其实有很多,在这里只是提选了二种比较典型的步骤加以引见。但无论是那一种步骤,C#在创造XML的时分都亟需用到.Net FrameWork SDK。之所以理解并掌握这个类库中的内容至于C#编程是十分必要的,鄙人面我们未来引见一下子用C#读取XML中的数据,透过这你会发现,C#又是利用这个类库兑现这个效能的。

3.C#读取XML资料:

本节将用C#来读取正文顶用第二种步骤创设的XML资料,编译NO二.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后的运作界面:




"Bei Jin" +

"" +

"" ) ;

//封存这个文档到资料中

doc.Save ( "data.xml" ) ;

}

}

用C#创设XML文档的步骤其实有很多,在这里只是拣选了二种比较典型的步骤加以引见。但无论是那一种步骤,C#在创设XML的时分都亟需用到.Net FrameWork SDK。之所以理解并掌握这个类库中的内容至于C#编程是十分必要的,鄙人面我们未来引见一下子用C#读取XML中的数据,透过这你会发现,C#又是利用这个类库兑现这个效能的。

3.C#读取XML资料:

本节将用C#来读取正文顶用第二种步骤创设的XML资料,编译NO二.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后的运作界面:

图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中的兑现代码,此中listview一是已经创设ListView组件:

while ( reader.Read ( ) )

{

//判断目前读获得节点部类

switch ( reader.NodeType )

{

case XmlNodeType.Element :

s = reader.Name ;

break ;

case XmlNodeType.Text :

if ( s.Equals ( "Name" ) )

myItem = Listview一.Items.Add ( reader.Value ) ;

else

myItem.SubItems.Add ( reader.Value ) ;

break ;

}

}

4.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 Form一 : Form

{

private Button button一 ;

private ListView Listview一 ;

private System.ComponentModel.Container components = null ;



public Form一 ( )

{

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

InitializeComponent ( ) ;

}

//驱除程序中运用过的资源

protected override void Dispose ( bool disposing )





< DIV>



四 C#读取XML资料

if ( disposing )

{

if ( components != null )

{

components.Dispose ( ) ;

}

}

base.Dispose ( disposing ) ;

}

private void InitializeComponent ( )

{

button一 = new Button ( ) ;

Listview一 = new ListView ( ) ;

SuspendLayout ( ) ;



button一.Anchor = ( ( AnchorStyles.Bottom | AnchorStyles.Left )

| AnchorStyles.Right ) ;

button一.Location = new Point ( 240 , 296 ) ;

button一.Name = "button一" ;

button一.Size = new Size ( 112 , 37 ) ;

button一.TabIndex = 零 ;

button一.Text = "读取XML文档" ;

button一.Click += new System.EventHandler ( button一_Click ) ;



Listview一.Anchor = ( ( ( AnchorStyles.Top | AnchorStyles.Bottom )

| AnchorStyles.Left )

| AnchorStyles.Right ) ;

Listview一.GridLines = true ;

Listview一.Location = new Point ( 十 , 九 ) ;

Listview一.Name = "Listview一" ;

Listview一.Size = new Size ( 623 , 269 ) ;

Listview一.TabIndex = 一 ;

Listview一.View = View.Details ;



this.AutoScaleBaseSize = new Size ( 六 , 14 ) ;

this.ClientSize = new Size ( 608 , 348 ) ;

this.Controls.Add ( Listview一 );

this.Controls.Add ( button一 );

this.Name = "Form一" ;

this.StartPosition = FormStartPosition.CenterScreen ;

this.Text = "用C#来读取XML文档" ;

this.ResumeLayout ( false ) ;



}

static void Main ( )

{

Application.Run ( new Form一 ( ) ) ;

}



private void button一_Click ( object sender , System.EventArgs e )

{

ListViewItem myItem = new ListViewItem ( ) ;

// 构建listview组件

Listview一.Columns.Clear ( ) ;

Listview一.Items.Clear ( ) ;

Listview一.Columns.Add ( "Name" , 80 , HorizontalAlignment.Left ) ;

Listview一.Columns.Add ( "Zip" , 80 , HorizontalAlignment.Left ) ;

Listview一.Columns.Add ( "Address" , 80 , HorizontalAlignment.Left ) ;

Listview一.Columns.Add ( "City" , 80 , HorizontalAlignment.Left ) ;

Listview一.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 = Listview一.Items.Add ( reader.Value ) ;

else

myItem.SubItems.Add ( reader.Value ) ;

break ;

}

}

}

finally

{

//驱除打开的数据流

if ( reader != null )

reader.Close ( ) ;

}

}

}

5.小结:

C#和XML的溯源是很深的,正文只是从一个侧面体现了彼此关系的紧密亲密程度。在.Net FrameWork SDK中存在好多可以直接操作XML的类库,掌握这些类库的使用方法,对用C#开发和XML有关程序是十分必要的。`



xd.Load("usr.xml");

XmlNode xd二=xd.SelectSingleNode("alluser");

XmlElement xd三=xd.CreateElement("zhoujiping");

xd二.AppendChild(xd三);

xd.Save("usr.xml");





六 恢复:C#读取XML资料

在C#中操作XML

我用的是一种很愚的步骤,但可以相助初学者理解访问XML节点的历程。



已知有一个XML资料(bookstore.xml)如次:









Corets, Eva

5.95







一、去节点中安插一个节点:

XmlDocument xmlDoc=new XmlDocument();

xmlDoc.Load("bookstore.xml");

XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查寻

XmlElement xe一=xmlDoc.CreateElement("book");//创造一个节点

xe一.SetAttribute("genre","李赞红");//设立该节点genre属性

xe一.SetAttribute("ISBN","二-3631-四");//设立该节点ISBN属性



XmlElement xesub一=xmlDoc.CreateElement("title");

xesub一.InnerText="CS从入门到精通";//设立文本节点

xe一.AppendChild(xesub一);//添加到节点中

XmlElement xesub二=xmlDoc.CreateElement("author");

xesub二.InnerText="候捷";

xe一.AppendChild(xesub二);

XmlElement xesub三=xmlDoc.CreateElement("price");

xesub三.InnerText="58.3";

xe一.AppendChild(xesub三);



root.AppendChild(xe一);//添加到节点中

xmlDoc.Save("bookstore.xml");

//===============================================

结果为:









Corets, Eva

5.95







候捷

58.3









xd.Load("usr.xml");

XmlNode xd二=xd.SelectSingleNode("alluser");

XmlElement xd三=xd.CreateElement("zhoujiping");

xd二.AppendChild(xd三);

xd.Save("usr.xml");









六 恢复:C#读取XML资料

在C#中操作XML

我用的是一种很愚的步骤,但可以相助初学者理解访问XML节点的历程。



已知有一个XML资料(bookstore.xml)如次:









Corets, Eva

5.95







一、去节点中安插一个节点:

XmlDocument xmlDoc=new XmlDocument();

xmlDoc.Load("bookstore.xml");

XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查寻

XmlElement xe一=xmlDoc.CreateElement("book");//创设一个节点

xe一.SetAttribute("genre","李赞红");//设立该节点genre属性

xe一.SetAttribute("ISBN","二-3631-四");//设立该节点ISBN属性



XmlElement xesub一=xmlDoc.CreateElement("title");

xesub一.InnerText="CS从入门到精通";//设立文本节点

xe一.AppendChild(xesub一);//添加到节点中

XmlElement xesub二=xmlDoc.CreateElement("author");

xesub二.InnerText="候捷";

xe一.AppendChild(xesub二);

XmlElement xesub三=xmlDoc.CreateElement("price");

xesub三.InnerText="58.3";

xe一.AppendChild(xesub三);



root.AppendChild(xe一);//添加到节点中

xmlDoc.Save("bookstore.xml");

//===============================================

结果为:









Corets, Eva

5.95







候捷

58.3







二、批改节点:将genre属性值为“李赞红“的节点的genre值改成“update李赞红”,将该节点的子节点的文本批改为“亚胜”。

XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的全部子节点

foreach(XmlNode xn in nodeList)//遍历全部子节点

{

XmlElement xe=(XmlElement)xn;//将子节点部类变换为XmlElement门类

if(xe.GetAttribute("genre")=="李赞红")//如若genre属性值为“李赞红”

{

xe.SetAttribute("genre","update李赞红");//则批改该属性为“update李赞红”



XmlNodeList nls=xe.ChildNodes;//持续获取xe子节点的全部子节点

foreach(XmlNode xn一 in nls)//遍历

{

XmlElement xe二=(XmlElement)xn一;//变换门类

if(xe二.Name=="author")//如其找出

{

xe二.InnerText="亚胜";//则批改

break;//找出退出来就可以了

}

}

break;

}

}



xmlDoc.Save("bookstore.xml");//封存。

//==================================================

最后结果为:









Corets, Eva

5.95







亚胜

58.3







三、剔除 节点的genre属性,剔除 节点。

XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;



foreach(XmlNode xn in xnl)

{

XmlElement xe=(XmlElement)xn;

if(xe.GetAttribute("genre")=="fantasy")

{

xe.RemoveAttribute("genre");//剔除genre属性

}

else if(xe.GetAttribute("genre")=="update李赞红")

{

xe.RemoveAll();//剔除该节点的所有内容

}

}

xmlDoc.Save("bookstore.xml");

//===========================================

最后结果为:









Corets, Eva

5.95












在C#中操作XML

我用的是一种很愚的步骤,但可以相助初学者懂得访问XML节点的进程。



已知有一个XML资料(bookstore.xml)如次:









Corets, Eva

5.95







一、去节点中安插一个节点:

XmlDocument xmlDoc=new XmlDocument();

xmlDoc.Load("bookstore.xml");

XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查寻

XmlElement xe一=xmlDoc.CreateElement("book");//创造一个节点

xe一.SetAttribute("genre","李赞红");//设立该节点genre属性

xe一.SetAttribute("ISBN","二-3631-四");//设立该节点ISBN属性



XmlElement xesub一=xmlDoc.CreateElement("title");

xesub一.InnerText="CS从入门到精通";//设立文本节点

xe一.AppendChild(xesub一);//添加到节点中

XmlElement xesub二=xmlDoc.CreateElement("author");

xesub二.InnerText="候捷";

xe一.AppendChild(xesub二);

XmlElement xesub三=xmlDoc.CreateElement("price");

xesub三.InnerText="58.3";

xe一.AppendChild(xesub三);



root.AppendChild(xe一);//添加到节点中

xmlDoc.Save("bookstore.xml");

//===============================================

结果为:









Corets, Eva

5.95







候捷

58.3







二、批改节点:将genre属性值为“李赞红“的节点的genre值改成“update李赞红”,将该节点的子节点的文本批改为“亚胜”。

XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的全部子节点

foreach(XmlNode xn in nodeList)//遍历全部子节点

{

XmlElement xe=(XmlElement)xn;//将子节点部类变换为XmlElement门类

if(xe.GetAttribute("genre")=="李赞红")//如若genre属性值为“李赞红”

{

xe.SetAttribute("genre","update李赞红");//则批改该属性为“update李赞红”



XmlNodeList nls=xe.ChildNodes;//持续获取xe子节点的全部子节点

foreach(XmlNode xn一 in nls)//遍历

{

XmlElement xe二=(XmlElement)xn一;//变换门类

if(xe二.Name=="author")//如若找出

{

xe二.InnerText="亚胜";//则批改

break;//找出退出来就可以了

}

}

break;

}

}



xmlDoc.Save("bookstore.xml");//封存。

//==================================================

最后结果为:









Corets, Eva

5.95







亚胜

58.3







三、剔除 节点的genre属性,剔除 节点。

XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;



foreach(XmlNode xn in xnl)

{

XmlElement xe=(XmlElement)xn;

if(xe.GetAttribute("genre")=="fantasy")

{

xe.RemoveAttribute("genre");//剔除genre属性

}

else if(xe.GetAttribute("genre")=="update李赞红")

{

xe.RemoveAll();//剔除该节点的所有内容

}

}

xmlDoc.Save("bookstore.xml");

//===========================================

最后结果为:









Corets, Eva

5.95











四、展示全部数据。

XmlNode xn=xmlDoc.SelectSingleNode("bookstore");



XmlNodeList xnl=xn.ChildNodes;



foreach(XmlNode xnf in xnl)

{

XmlElement xe=(XmlElement)xnf;

Console.WriteLine(xe.GetAttribute("genre"));//展示属性值

Console.WriteLine(xe.GetAttribute("ISBN"));



XmlNodeList xnf一=xe.ChildNodes;

foreach(XmlNode xn二 in xnf一)

{

Console.WriteLine(xn二.InnerText);//展示子节点点文本

}



本文来源:
我的异常网
Java Exception
Dotnet Exception
Oracle Exception

  • 930 - checkout报error
  • 931 - Error 500--Internal Server Error
  • 932 - error对象怎么用
  • 933 - hsahMap如何用iterrate输出
  • 934 - ClassCastException
  • 935 - javax.naming.CommunicationException
  • 936 - No appropriate node to show Web View
  • 937 - 如何配置Tomcat日志
  • 938 - could not obtain archive information since it is corrupted
  • 939 - javax.naming.NamingException
  • 940 - java.io.UTFDataFormatException
  • 941 - org.jboss.deployment.DeploymentException
  • 942 - java.lang.OutOfMemoryError:PermGen space
  • 943 - java.io.ioexception
  • 944 - java.lang.UnsupportedClassVersionError
  • 945 - 应用程序错误
  • 947 - Connection reset by peer:socket write error
  • 948 - Tomcat jdk name error
  • 949 - java.lang.OutOfMemoryError: PermGen space
  • 原创粉丝点击