日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

關(guān)于.NET Framework提供的XML文件格式化

 liuqg 2006-03-11

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多