在我的上一篇文章《C#中使用XML——讀取XML》中和大家討論了如何使用.NET Framework中提供的類在C#中讀取XML以及讀取的一些相關概念,那麼今天就說一說如何在C#中編寫XML文檔,起初我覺得用編程的方式去編寫XML簡直就是自討苦吃,後來想想還是覺得挺有用的,我想Microsoft那班家伙能編出這些類來應該不是僅僅為了向比爾i蓋茨交差吧!至於它的用處嘛……比如說做安裝程序啊!我們可以根據在安裝過程中用戶所選的選項以及一些設置來生成相應的XML文檔再根據XML文檔來初始化我們的應用程序。空洞的話不說那麼多了,下面我們來了解一下具體的實現細節。
要編寫XML同樣是采用流的概念,在.NET中編寫XML的細節是作為XmlWriter類來實現的,但該類是抽象類不能夠實例化,為此,我們要想在程序中訪問它的方法以實現編寫XML的願望,必需使用它的派生類XmlTextWriter,該類提供了一系列的屬性和方法為我們編寫XML做准備,下面將詳細的介紹這個類:
構造函數:
public XmlTextWriter(TextWriter); public XmlTextWriter(Stream, Encoding); public XmlTextWriter(string, Encoding);
第一個構造函數是把現有的TextWriter實例傳遞過去,System.IO.TextWriter類是一個有序的字符流
第二個構造函數是把要寫入的流作為第一個參數,第二個參數是指定XML文檔的編碼方式,默認是UTF8,可取Encoding的枚舉值,流可以是FileStream,MemoryStream,NetworkStream等等
第三個構造函數是把希望寫入的文件名當作一個字符串(如果存在,就重寫該文件)傳遞給第一個參數,第二個參數指定編碼方式
常用的方法:
WriterStartDocument()和WriterEndDocument()方法:
第一個方法用來編寫XML聲明部分,如:<?xml version=”1.0” encoding=”UTF-8” ?>
第二個方法用來關閉任何打開的元素或屬性並將編寫器重新設置為 Start 狀態。
WriterStartElement()和WriteEndElement()方法:
第一個方法用來寫出指定的開始標記,該方法有以下幾個重載:
WriterStartElement(string localname)
使用傳遞的字符串作為元素的本地名稱
WriterStartElement(string localname,string namespace)
第一個參數指定元素的本地名稱,第二個參數指定元素所在的命名空間
WriterStartElement(string prefix,string localname,string namespace)
第一個參數指定元素的前綴,第二個參數指定元素的本地名稱,第三個參數指定元素所在的命名空間
第二個方法用來寫出與開始元素對應的關閉元素,如果開始元素不包含任何內容,將用一個”/>”做為關閉元素
WriterStartAttribute()和WriterEndAttribute()方法:
第一個方法用於編寫一個屬性的開頭,該方法有兩個重載:
WriterStartAttribute(string localname,string namespace)
第一個參數指定屬性的本地名稱,第二個參數指定屬性所在的命名空間
WriterStartAttribute(string prefix,string localname,string namespace)
第一個參數指定屬性的前綴,第二個參數指定屬性的本地名稱,第三個參數指定屬性所在的命名空間
第二個方法用於關閉WriterStartAttribute創建的屬性
WriterElementString()方法:
該方法可以創建一個包含字符串值的元素,它有以下重載:
WriterElementString(string localname,string value)
如果編寫這樣的代碼:WriterElementString(“para”,”Some text”) 將輸出:<para>Some text</para>
WriterElementString(string localname,string namespace,string value)
如果編寫這樣的代碼:WriterElementString(“para”,”http://www.w3.org/ns”,”Some text”) 將輸出:<para xmlns=”http://www.w3.org/ns”>Some text</para>
如果編寫嵌套幾級的元素可使用WriterStartElement()和WriterEndElement()方法,如果編寫直接包含內容的元素可以使用該方法
WriterAttributeString()方法:
類似與WriterElementString()方法,在使用上如果屬性的值當中不包含實體可直接使用該方法來寫出屬性,如果屬性值包含實體可使用WriterStartAttribute()和WriterEndAttribute()方法,例如要寫出這樣的XML——<para author=”Do&0241;a&L.Perez”/>,可編寫以下代碼: