在我的上一篇文章《C#中使用XML——讀取XML target=_blank>C#中使用XML——讀取XML 》中和大家討論了如何使用
NET Framework中提供的類在C#中讀取XML以及讀取的一些相關概念
那麼今天就說一說如何在C#中編寫XML文檔
起初我覺得用編程的方式去編寫XML簡直就是自討苦吃
後來想想還是覺得挺有用的
我想Microsoft那班家伙能編出這些類來應該不是僅僅為了向比爾i蓋茨交差吧!至於它的用處嘛……比如說做安裝程序啊!我們可以根據在安裝過程中用戶所選的選項以及一些設置來生成相應的XML文檔再根據XML文檔來初始化我們的應用程序
空洞的話不說那麼多了
下面我們來了解一下具體的實現細節
要編寫XML同樣是采用流的概念
在
NET中編寫XML的細節是作為XmlWriter類來實現的
但該類是抽象類不能夠實例化
為此
我們要想在程序中訪問它的方法以實現編寫XML的願望
必需使用它的派生類XmlTextWriter
該類提供了一系列的屬性和方法為我們編寫XML做准備
下面將詳細的介紹這個類
構造函數
cellPadding=
border=
>
public XmlTextWriter(TextWriter);
public XmlTextWriter(Stream
Encoding);
public XmlTextWriter(string
Encoding);
第一個構造函數是把現有的TextWriter實例傳遞過去
System
IO
TextWriter類是一個有序的字符流
第二個構造函數是把要寫入的流作為第一個參數
第二個參數是指定XML文檔的編碼方式
默認是UTF
可取Encoding的枚舉值
流可以是FileStream
MemoryStream
NetworkStream等等
第三個構造函數是把希望寫入的文件名當作一個字符串(如果存在
就重寫該文件)傳遞給第一個參數
第二個參數指定編碼方式
常用的方法
WriterStartDocument()和WriterEndDocument()方法
第一個方法用來編寫XML聲明部分
如
<?xml version=
encoding=
UTF
?>
第二個方法用來關閉任何打開的元素或屬性並將編寫器重新設置為 Start 狀態
WriterStartElement()和WriteEndElement()方法
第一個方法用來寫出指定的開始標記
該方法有以下幾個重載
cellPadding=
border=
>
WriterStartElement(string localname)
使用傳遞的字符串作為元素的本地名稱
cellPadding=
border=
>
WriterStartElement(string localname
string namespace)
第一個參數指定元素的本地名稱
第二個參數指定元素所在的命名空間
cellPadding=
border=
>
WriterStartElement(string prefix
string localname
string namespace)
第一個參數指定元素的前綴第二個參數指定元素的本地名稱第三個參數指定元素所在的命名空間
第二個方法用來寫出與開始元素對應的關閉元素如果開始元素不包含任何內容將用一個/>做為關閉元素
WriterStartAttribute()和WriterEndAttribute()方法
第一個方法用於編寫一個屬性的開頭該方法有兩個重載
cellPadding=
border=
>
WriterStartAttribute(string localname
string namespace)
第一個參數指定屬性的本地名稱
第二個參數指定屬性所在的命名空間
cellPadding=
border=
>
WriterStartAttribute(string prefix
string localname
string namespace)
第一個參數指定屬性的前綴
第二個參數指定屬性的本地名稱
第三個參數指定屬性所在的命名空間
第二個方法用於關閉WriterStartAttribute創建的屬性
WriterElementString()方法
該方法可以創建一個包含字符串值的元素
它有以下重載
cellPadding=
border=
>
WriterElementString(string localname
string value)
如果編寫這樣的代碼
WriterElementString(
para
Some text
) 將輸出
<para>Some text</para>
cellPadding=
border=
>
WriterElementString(string localname
string namespace
string value)
如果編寫這樣的代碼
WriterElementString(
para
Some text
) 將輸出
<para xmlns=
>Some text</para>
如果編寫嵌套幾級的元素可使用WriterStartElement()和WriterEndElement()方法
如果編寫直接包含內容的元素可以使用該方法
WriterAttributeString()方法
類似與WriterElementString()方法
在使用上如果屬性的值當中不包含實體可直接使用該方法來寫出屬性
如果屬性值包含實體可使用WriterStartAttribute()和WriterEndAttribute()方法
例如要寫出這樣的XML——<para author=
Do&
;a&L
Perez
/>
可編寫以下代碼
cellPadding=
border=
>
WriterStartElement(
para
);
WriterStartAttribute(
author
null);
WriterString(
Do
);
WriterCharEntiry(
~n
);
WriterString(
a
);
WriterCharEntiry(
&
);
WriterString(
L
Perez
);
WriterEndAttribute();
WriterEndElement();
該方法有以下重載
cellPadding=
border=
>
WriterAttributeString(string localname
string value);
WriterAttributeString(string localname
string namespace
string value);
WriterAttributeString(string prefx
string localname
string namespace
string value);
WriterNode(XmlReader reader
bool defattr)方法
該方法可以從XmlReader讀取器中復制節點並把它們寫入XmlWriter流中
第一個參數是XmlReader的實例
第二個參數接受一個布爾值
決定是否復制元素中的屬性
考慮下面XML片段
cellPadding=
border=
>
<para>
<sent>
The<b>XmlWriter</b>class writes XML content to a Stream
</sent>
</para>
以下代碼復制其中的片段
reader代表XmlReader的實例writer代表XmlWriter類的實例
cellPadding=
border=
>
while(reader
Read())
{
if (reader
Name ==
sent
&& reader
NodeType == XmlNodeType
Element)
{
writer
WriterNode(reader
true);
}
}
得到以下輸出
cellPadding=
border=
>
<sent>
The<b>XmlWriter</b>class writes XML content to a Stream
</sent>
WriterComment(string text)方法用於寫出注釋
WriterString(string text)方法用於寫出文本
WriterCData(string text)方法寫出CDATA數據塊
WriterBase(byte[] bufferint indexint count)方法將指定的二進制字節編碼為 Base 並寫出結果文本
Flush()將緩沖區中的所有內容刷新到基礎流並同時刷新基礎流 Close()關閉此流和基礎流
以上對XmlTextWriter類的一些重要方法做了簡單介紹下面我們就來看一個例程看看在程序中如何使用這些方法照樣還是先來看下運行效果圖
javascript:if(thiswidth>)thiswidth=; onclick=javascript:windowopen(thissrc); src=_//JPG width= onload=javascript:if(thiswidth>)thiswidth=; align=absMiddle border=>
Example按紐將向一個文件寫出XML聲明和一個元素節點以及節點內的文本Example按紐將在Example的基礎上添加屬性節點嵌套元素以及文本WriteNode按紐使用WriterNode()方法在現有讀取器中復制該讀取器中的所有元素及屬性並寫到一個新的XML文檔中Example按紐將寫一份完整的XML文檔Example按紐在Example按紐的基礎上另外生成一份文檔並向該文檔中追加CDATA部分Example按紐將使用WriterBase()方法對一幅圖片進行編碼並將編碼後的數據寫到XML文檔中Example按紐將使用Example按紐中生成的XML讀取其中數據並對其中編碼數據進行解碼最後生成一張圖片
以下是在WriteNode按紐中要使用到的XML文件
唐詩xml
cellPadding=
border=
>
<?xml version=
encoding=
gb
?>
<唐詩>
<五言絕句>
<作者 字號=
太白
>李白</作者>
<標題>靜夜思</標題>
<內容>床前明月光
疑是地上霜
舉頭望明月
低頭思故鄉
</內容>
</五言絕句>
<五言絕句>
<作者 字號=
太白
>李太白</作者>
<標題>春曉</標題>
<內容>春眠不覺曉
處處聞啼鳥
夜來風雨聲
花落知多少
</內容>
</五言絕句>
<五言絕句>
<作者 字號=
季凌
>王之渙</作者>
<標題>登鶴雀樓</標題>
<內容>白日依山盡
黃河入海流
欲窮千裡目
更上一層樓</內容>
</五言絕句>
<五言絕句>
<作者>李清照</作者>
<標題>如夢令</標題>
<內容>昨夜風疏雨驟
濃睡不消殘酒
試問卷簾人
卻道海棠依舊
知否
知否
應是綠肥紅瘦
</內容>
</五言絕句>
</唐詩>
From:http://tw.wingwit.com/Article/program/ASP/201311/21765.html