DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> C#來創建和讀取XML文檔(1)
C#來創建和讀取XML文檔(1)
編輯: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 ( ) ;
}

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

五.總結

C#和XML的淵源是很深的,本文只是從一個側面反映了二者關系的密切程度。在.Net FrameWork SDK中存在許多可以直接操作XML的類庫,掌握這些類庫的使用方法,對用C#開發和XML相關程序是十分必要的。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved