關於.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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- xml是什麼格式的檔案 xml檔案怎麼開啟XML
- Linux shell格式化XML檔案LinuxXML
- 什麼是 Office Open XML 檔案格式XML
- 基於 DOM 的 XML 檔案解析類XML
- MyBatis基於xml檔案的 CURD案例MyBatisXML
- ASP.NET Web Forms – XML 檔案簡介ASP.NETWebORMXML
- xml檔案XML
- 一種自主學習 Office Open XML 檔案格式的方法介紹XML
- ASP.NET與.NET Framework和C#的關係ASP.NETFrameworkC#
- 關於檔案的open方法
- python XML 檔案解析PythonXML
- jdom解析xml檔案XML
- AndroidMainfest.xml檔案AndroidAIXML
- mysql關於ibdata檔案的理解MySql
- 基於NET 6.0 封裝的 Fast.Framework封裝ASTFramework
- java 語音用xml檔案實現圖形介面 xml檔案JavaXML
- 關於spring新建專案pom.xml報紅SpringXML
- ASP.NET Core 中的檔案提供程式 遍歷資料夾讀取檔案資訊ASP.NET
- 【SSM框架整合】專案xml檔案、properties等檔案的配置SSM框架XML
- Maven的settings.xml檔案配置MavenXML
- .NET科普:.NET簡史、.NET Standard以及C#和.NET Framework之間的關係C#Framework
- .NET Framework 4和.NET Framework 4 Client Profile的區別Frameworkclient
- 構建dubbo分散式平臺-maven構建ant-framework框架的pom.xml檔案配置分散式MavenFramework框架XML
- 檔案開啟的格式
- 使用 Java 解析XML檔案JavaXML
- Go xml檔案處理GoXML
- sqlserver關於filestream檔案流、filetable檔案表的總結SQLServer
- 關於ubuntu修改hosts檔案的方法Ubuntu
- 關於Play框架的靜態檔案框架
- Android 關於 so 檔案的總結Android
- 關於C++的標頭檔案C++
- elf檔案格式
- smali 檔案格式
- FastQ檔案格式AST
- vsd格式檔案怎麼開啟 vsd是什麼格式的檔案,
- 檔案流下載檔案,zip/其他格式檔案
- 【C# .Net Framework】在.Net Framework中使用gRPCC#FrameworkRPC
- Maven的pom.xml檔案詳解MavenXML
- java去除xml檔案中的標籤JavaXML