關於.NET Framework提供的XML檔案格式

iDotNetSpace發表於2010-03-18
以前一直用Java,對於XML的處理大多數時候都是直接使用JDK提供的標準DOM和SAX API,很少會去關心API背後的具體實現,個人而言比較偏愛Xerces,時間長了,習以為常,僅此而已。
如今用.NET,概嘆XML技術的無處不在之外,還要花一點點時間去了解和適應.NET Framework提供的XML操縱API。.NET Framework提供的API也無他,無非就是DOM和SAX,只是在傳統的SAX的基礎上有所發展,弄出來一個什麼使用“拉”技術的改良SAX,嘗試了一下,確實要比傳統的SAX要簡單、靈活,不用再繼承某一個稀奇古怪的什麼類又實現什麼讓人傷腦筋的回撥方法,只要弄一個while迴圈嵌一個switch結構就可以“只關心你所關心的節點型別和節點內容”。和DOM對應的類是XmlDocument及其派生類,和SAX對應的類是XmlReader及其派生類,例如常用的XmlTextReader。
前兩天做一個小工具,作用是根據XML檔案描述來批量生成一些煩冗複雜無聊透頂的C#程式碼,以前老師吹噓XML的魔力的時候提到過“...甚至你可以用XML來實現一套你自己的語言...”云云,當時聽著沒當回事,現在想來還真的名不虛傳(btw,其實類似的事情人家XDoclet老早就這麼做了)。期間有個小想法,就是把一個雜亂無章的xml文字弄得漂漂亮亮的,再顯示出來看著好舒服點,自然就想到了XML文件的格式化。
在Java領域裡整理、美化一個XML文件是一件很easy的事情,有很多開源元件都可以出色地完成這個任務,不過在用.NET Framework API的時候著實讓我苦惱了一下。當時查了半天的MSDN也就僅僅發現XmlTextWriter可以實現這個目的而已,而且XmlTextWriter還必須將內容輸出到一個物理File或者是一個Stream(管你流到哪:),除非你手工拼湊字串。但是我不想將之輸出到任何記憶體之外的地方也不想拼湊無聊的字串,於是又去翻System.IO名稱空間,搗鼓了半天才發現一個MemoryStream(Java領域好像沒有這種說法?),雖然是孤陋寡聞但是好歹也找對了。擺弄了一下,程式碼貼出,誰要參考的拿去吧,有好的批評建議可別吝嗇要向我反饋。
private void btnShow_Click(object sender, System.EventArgs e)
{
string xmlfile = @"C:\tmp.xml";
MemoryStream mstream = new MemoryStream( 1024 );
XmlTextWriter writer = new XmlTextWriter( mstream, null );
XmlDocument xmldoc = new XmlDocument();
writer.Formatting = Formatting.Indented;
xmldoc.Load( xmlfile );
xmldoc.WriteTo( writer );
writer.Flush();
writer.Close();
Encoding encoding = Encoding.GetEncoding( "utf-8" );
this.rtxtResult.Text = encoding.GetString(mstream.ToArray());
mstream.Close();
}
注:這僅僅是示例程式碼,不適用於工業強度。
後記:當時是用RichTextBox來顯示xml文字,雖然經過了格式化,但是看起來還是不舒服,後來乾脆整了一個WebBrowser貼在Form上,直接去Navigate一個XML物理File,效果就跟用IE開啟XML一樣,縮排、高亮、摺疊都有了,省心省力

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-629780/,如需轉載,請註明出處,否則將追究法律責任。

相關文章