引言
隨著XML的普及以及在動態WEB應用程序中大量應用如何通過NET創建刪除修改XML文件變的也來也重要了一個簡單的概念是XML文件跟大的文本文件並沒有什麼區別同時它是先於NET出現很多ASP的開發者當他需要程序輸出XML文件的時候通常都是用ResponseWrite()方法輸出為XML文檔
使用ResponseWrite()的方式來輸出XML文檔並不是一種那麼好的方法首先我們用這種方法輸出字符以組成XML文件的時候我們會很擔心輸出的這些字符是不是符合XML規范不符合XML規范的XML文檔將不能得到真確完整的顯示如<>&和這些符號當它們在XML文件裡的出現的時候我們必須手工查找這些不合規范的字符再次當我們需要輸出的是一個包含很多名字空間屬性和元素的XML文件的時候使用ResponseWrite()方法所必須的代碼將會變得冗長以及可讀性差
幸運的是NET FrameWork提供了一個特別為創建XML文件使用的類-SystemXmlXmlTextWriter使用這個類來創建XML文件你並不需要擔心輸出是否符合XML規范的問題同時代碼將會變得非常簡潔在這篇文章中我們將深入的講述如何使用XmlTextWriter類來創建XML文件
關於XML的說明
這篇文章假定讀者具備一定的XML基礎如果你剛接觸XML我建議你在繼續閱讀本文之前首先去看看什麼是XML和XML起步這些資料
XmlTextWriter對象簡介
XmlTextWriter對象包含了很多可用於在創建XML文件時添加元素和屬性到XML文件裡的方法比較重要的有
WriteStartDocument()-創建XML文件首先就需要用到這個方法它是在創建XML文件的第一行代碼用來指定該文件是XML文件以及設置它的編碼類型
WriteStartElement(string)-這個方法的作用是在XML文件中創建新元素你可以通過String參數設置元素的名稱(當然了你還可以使用optional關鍵字指定一個可選的參數)
WriteElementString(name text_value)-如果你需要創建一個除了字符什麼也沒有的(如不嵌套元素)的元素你可以使用該方法
WriteEndElement()-對應WriteStartElement(string)方法作為一個元素的結尾
WriteEndDocument()-XML文件創建完成後使用該方法結束
Close()-關閉所有的文本流把創建的XML文件輸出到指定位置
使用XmlTextWriter對象創建XML文件需要在類構造器中指定文件的類型而且編碼類型必須是SystemTextEncoding如SystemTextEncodingASCII SystemTextEncodingUnicode及SystemTextEncodingUTF在XmlTextWriter類構造器指定為何種類型在輸出XML文件將以那種流文件形式輸出
使用XmlTextWriter對象創建一個簡單的XML文件
接下來我們示范一下如何使用XmlTextWriter對象來創建一個簡單的XML文檔並把它保存到指定的位置這個XML文件將包含訪問該文件的用戶的相關信息它的輸出格式如下
<userInfo>
<browserInfo>
<urlReferrer>URL referrer info</urlReferrer>
<userAgent>User agent referrer info</userAgent>
<userLanguages>languages info</userLanguages>
</browserInfo>
<visitInfo timeVisited=date/time the page was visited>
<ip>visitors IP address</ip>
<rawUrl>raw URL requested</rawUrl>
</visitInfo>
</userInfo>
選用這個有這種結構的XML文件為輸出對象是為了可以在這裡使用所有先前講過的方法方便闡述
如下便是創建該XML文件所需的ASPNET代碼
<%@ Import Namespace=SystemXml %>
<%@ Import Namespace=SystemText %>
<script language=C# runat=server>
void Page_Load(object sender EventArgs e)
{
// Create a new XmlTextWriter instance
XmlTextWriter writer = new
XmlTextWriter(ServerMapPath(userInfoxml) EncodingUTF);
// start writing!
writerWriteStartDocument();
writerWriteStartElement(userInfo);
// Creating the <browserInfo> element
writerWriteStartElement(browserInfo);
if (RequestUrlReferrer == null)
writerWriteElementString(urlReferrer none);
else
writerWriteElementString(urlReferrer
RequestUrlReferrerPathAndQuery);
writerWriteElementString(userAgent RequestUserAgent);
writerWriteElementString(userLanguages
StringJoin( RequestUserLanguages));
writerWriteEndElement();
// Creating the <visitInfo> element
writerWriteStartElement(visitInfo);
writerWriteAttributeString(timeVisited DateTimeNowToString());
writerWriteElementString(ip RequestUserHostAddress);
writerWriteElementString(rawUrl RequestRawUrl);
writerWriteEndElement();
writerWriteEndElement();
writerWriteEndDocument();
writerClose();
}
首先我們要注意是否有導入SystemXml and SystemText命名空間然後我們在Page_Load事件中創建一個XmlTextWriter對象實例並且指定創建的XML文件保存為userInfoxml文件和它的編碼類型為UTF(a translation of bit unicode encoding into bits)然後使用WriteStartElement(elementName)方法來創建嵌套了其他元素的元素並以WriteEndElement()作為結束此外我們使用WriteElementString(elementName textValue)方法來創建最底層即沒有嵌套其他元素的元素
在浏覽器窗口中輸出XML文件
先前的例子示范了如何使用XmlTextWriter對象創建xml文件以及把它保存為一個文件這個文件可能是你所需要的但是有時候我們需要把創建的XML文件在浏覽器上顯示出來這個時候我們可以使用上例代碼創建userInfoxml文件然後打開它再使用ResponseWrite()把它輸出但是這種方法並不是很好
一個好的方法是立即把XmlTextWriter對象的結果顯示在浏覽器上要實現這個功能非常地容易只需要在上例的代碼基礎上修改一行代碼就可以了在XmlTextWriter的類構造器中我們不指定為一個文件路徑而是指定為ResponseOutputStream以使ASPNET程序直接輸出XML流到浏覽器中而不是保存為一個文件當然了你還可以設定<@ Page >指令中的MIME類型為text/xml來實現同樣的功能但是我建議你不要用這種方法來實現因為有些浏覽器不認得該格式而把它當做html來解釋(它將蘊藏所有的xml元素並刪除所有的空格)
下面列出了上例修改後的部分代碼修改過的代碼將一些粗體顯示
<@ Page ContentType=text/xml %>
<%@ Import Namespace=SystemXml %>
<%@ Import Namespace=SystemText %>
<script language=C# runat=server>
void Page_Load(object sender EventArgs e)
{
// Create a new XmlTextWriter instance
XmlTextWriter writer = new
XmlTextWriter(ResponseOutputStream EncodingUTF);
// start writing!
}
注意盡管你訪問的是aspnet Web頁面但是你查看該實例所看到的僅僅是XML文檔這個文檔跟先前創建的XML文件是一樣的所不同的是先前是保存為一個XML文件userInfoxml
總結
本文示范了在NET Framework中如何使用SystemXmlXmlTextWriter類來創建XML文件XmlTextWriter對象可以創建一個XML文件並把它保存到指定位置也可以直接以指定的流形式顯示在浏覽器上在很多編碼工作中使用XmlTextWriter對象構建基於XML的程序會有很多的優勢其中主要有可以使代碼更加簡潔更具可讀性同時不用擔心輸出的XML文件是否符合規范
From:http://tw.wingwit.com/Article/program/net/201311/15355.html