熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#來創建和讀取XML文檔

2013-11-13 10:12:48  來源: .NET編程 

  擴展標記語言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相關程序是十分必要的


From:http://tw.wingwit.com/Article/program/net/201311/12929.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.