關於.NET Framework提供的XML檔案格式
以前一直用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一樣,縮排、高亮、摺疊都有了,省心省力
如今用.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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於 ylepub 檔案格式
- Office檔案的Open Xml 格式XML
- 關於ELF檔案格式的實驗
- 關於 Pentaho 的配置檔案 pentaho.xmlXML
- 關於SAX解析xml檔案的問題XML
- xml是什麼格式的檔案 xml檔案怎麼開啟XML
- [轉載]淺析.NET Framework對PE檔案格式的擴充套件Framework套件
- .NET操作XML檔案---[新增]XML
- 關於Java Web工程中web.xml檔案JavaWebXML
- 關於Android中xml佈局檔案之android 入門xml佈局檔案AndroidXML
- 請教高手關於解析xml檔案的問題 急~~XML
- 什麼是 Office Open XML 檔案格式XML
- Linux shell格式化XML檔案LinuxXML
- MyBatis基於xml檔案的 CURD案例MyBatisXML
- 基於 DOM 的 XML 檔案解析類XML
- 【Java Web】——配置檔案的格式之xml和properties的區分JavaWebXML
- springmvc基於xml配置檔案SpringMVCXML
- 關於檔案格式Fuzzing測試與漏洞挖掘的學習
- XML 程式設計思想:查詢 XML 格式的 WordNet(轉)XML程式設計
- 告急:關於檔案的定義格式與命名規則的問題
- Eclipse設定XML檔案的自動格式化配置EclipseXML
- xml檔案XML
- ASP.NET Web Forms – XML 檔案簡介ASP.NETWebORMXML
- 一種自主學習 Office Open XML 檔案格式的方法介紹XML
- 關於oracle的控制檔案Oracle
- 關於檔案的open方法
- CAB(Cabinet)檔案是一種Windows作業系統中常見的壓縮檔案格式,通常用於打包和壓縮一組相關檔案,以便於分發和安裝。以下是關於CAB檔案的一些基本資訊:Windows作業系統
- 關於xml解析XML
- 關於dom4j對xml檔案實現增刪改創的操作XML
- Asp.net中關於上傳檔案的各項基本操作ASP.NET
- 關於控制檔案的總結
- banq:關於XML的學習XML
- .Net Framework各版本之間的關係Framework
- 關於PDF檔案解密解密
- oracle 關於--控制檔案Oracle
- 關於web.xmlWebXML
- ASP.NET Core 中的檔案提供程式 遍歷資料夾讀取檔案資訊ASP.NET
- .NET Framework終於開源了!Framework