以前一直用Java,對于XML的處理大多數時(shí)候都是直接使用JDK提供的標準DOM和SAX API,很少會(huì )去關(guān)心API背后的具體實(shí)現,個(gè)人而言比較偏愛(ài)Xerces,時(shí)間長(cháng)了,習以為常,僅此而已。
如今用.NET,概嘆XML技術(shù)的無(wú)處不在之外,還要花一點(diǎn)點(diǎn)時(shí)間去了解和適應.NET Framework提供的XML操縱API。.NET Framework提供的API也無(wú)他,無(wú)非就是DOM和SAX,只是在傳統的SAX的基礎上有所發(fā)展,弄出來(lái)一個(gè)什么使用“拉”技術(shù)的改良SAX,嘗試了一下,確實(shí)要比傳統的SAX要簡(jiǎn)單、靈活,不用再繼承某一個(gè)稀奇古怪的什么類(lèi)又實(shí)現什么讓人傷腦筋的回調方法,只要弄一個(gè)while循環(huán)嵌一個(gè)switch結構就可以“只關(guān)心你所關(guān)心的節點(diǎn)類(lèi)型和節點(diǎn)內容”。和DOM對應的類(lèi)是XmlDocument及其派生類(lèi),和SAX對應的類(lèi)是XmlReader及其派生類(lèi),例如常用的XmlTextReader。
前兩天做一個(gè)小工具,作用是根據XML文件描述來(lái)批量生成一些煩冗復雜無(wú)聊透頂的C#代碼,以前老師吹噓XML的魔力的時(shí)候提到過(guò)“...甚至你可以用XML來(lái)實(shí)現一套你自己的語(yǔ)言...”云云,當時(shí)聽(tīng)著(zhù)沒(méi)當回事,現在想來(lái)還真的名不虛傳(btw,其實(shí)類(lèi)似的事情人家XDoclet老早就這么做了)。期間有個(gè)小想法,就是把一個(gè)雜亂無(wú)章的xml文本弄得漂漂亮亮的,再顯示出來(lái)看著(zhù)好舒服點(diǎn),自然就想到了XML文檔的格式化。
在Java領(lǐng)域里整理、美化一個(gè)XML文檔是一件很easy的事情,有很多開(kāi)源組件都可以出色地完成這個(gè)任務(wù),不過(guò)在用.NET Framework API的時(shí)候著(zhù)實(shí)讓我苦惱了一下。當時(shí)查了半天的MSDN也就僅僅發(fā)現XmlTextWriter可以實(shí)現這個(gè)目的而已,而且XmlTextWriter還必須將內容輸出到一個(gè)物理File或者是一個(gè)Stream(管你流到哪:),除非你手工拼湊字符串。但是我不想將之輸出到任何內存之外的地方也不想拼湊無(wú)聊的字符串,于是又去翻System.IO命名空間,搗鼓了半天才發(fā)現一個(gè)MemoryStream(Java領(lǐng)域好像沒(méi)有這種說(shuō)法?),雖然是孤陋寡聞但是好歹也找對了。擺弄了一下,代碼貼出,誰(shuí)要參考的拿去吧,有好的批評建議可別吝嗇要向我反饋。
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();
}
注:這僅僅是示例代碼,不適用于工業(yè)強度。
后記:當時(shí)是用RichTextBox來(lái)顯示xml文本,雖然經(jīng)過(guò)了格式化,但是看起來(lái)還是不舒服,后來(lái)干脆整了一個(gè)WebBrowser貼在Form上,直接去Navigate一個(gè)XML物理File,效果就跟用IE打開(kāi)XML一樣,縮進(jìn)、高亮、折疊都有了,省心省力。。-_-#
聯(lián)系客服