亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > XML > 正文

高效交換XML文檔

2024-09-05 20:54:20
字體:
來源:轉載
供稿:網友

XML文檔因為其固有的描述性特性而趨向于變得很羅嗦。其結果是文檔會由于被描述的數據增多而變得很長,而這種很大的文檔會在需要同其他實體進行交換時出現問題。和其他文檔(比如普通文本文件(flat file)或者Electronic Data Interchange (EDI))比起來XML文檔就顯得特別冗長。為了舉例說明這個概念,讓我們看看以下這個普通文本文件: John,Doe,1587,4/18/2000,1234

Anywhere St.,SomeCity,AZ,85222

再看這個XML文檔:<customers>

以下為引用的內容:
<customer customerID="1587">
<firstName>John</firstName>
<lastName>Doe</lastName>
<customerSince>4/18/2000
</customerSince>
<street>1234 Anywhere St.
</street>
<city>SomeCity</city>
<state>AZ</state>
<postalCode>85222</postalCode>
</customer>
</customers>

如果你曾處理過很多XML文檔,那么你就不會奇怪于即使這個XML文檔和這個以逗號分隔開的普通文本文件中包含了相同的原始數據(raw data),XML文檔也顯得比普通文本文件大很多了。畢竟,XML是一種元數據語言(metadata language)(它包含了許多優點比如支持解析、驗證、轉換等等),因此決定了其大小會比另一些同類文檔格式大很多。由于XML被更廣泛地作為一種數據交換的方法來使用,那么被交換的文檔的大小會降低應用程序的性能和可升級性就是毫無疑問的了。

有很多方法來使XML文檔的大小最小化,比如(在適當的地方)將元素轉換為屬性,縮寫元素和屬性名,去掉不重要的空白處,只定義一些內容。然而無論你做出何種改變,最終大量的原始數據還是會形成一個很大的XML文檔。如果你的XML文檔中包含有很多兆字節,你又該如何在你的企業中對它們進行有效地傳遞或將它們傳遞到其他企業中去呢?

一種方法是將一個大的XML文檔分成多個文檔,它們會(如果可以切分的話)運行的很好,但這樣還會產生一些額外的復雜性和確保所有文檔都能被準確發送和接收的問題。即使是被分開的小文檔也可能會由于大量被傳遞的數據而形成幾兆字節大小的文檔。既然存在這些潛在的問題,那我們這些XML開發人員該如何更有效地對XML數據進行交換呢?(我贊成去打高爾夫。)

你可以用壓縮技術來加速各點之間的文檔交換。由于XML是一個簡單的文本形式,因此大的文檔可以被壓縮成較小形式。這里顯示的范例程序證明了如何通過將一個開發式代碼的.Net組件添加到一個ZIP存檔文件中來實現用程序來壓縮XML文檔。這么做能夠將文件的大小減至最小并提高數據交換的效率。

盡管.Net的J#語言本身支持壓縮,但構建到.Net框架中的基類庫卻不支持。然而,有一個完全由管制代碼寫成的名為SharpZipLib的組件可以被用于壓縮各種類型的文檔(在www.icsharpcode.net/OpenSource/SharpZipLib/default.asp中下載該組件)。SharpZipLib是一個用C#寫的、用在.Net中支持Zip、GZip、Tar和BZip2的類庫。它是作為一個assembly來實現的,而且它還能夠同任何使用.Net語言的項目結合使用。

我曾在幾個應用程序中使用過SharpLibZip的早期beta發行版,我認為它在對文檔進行壓縮和解壓縮方面非常有效。讓我們來看看如何使用SharpZipLib組件來實現用程序壓縮XML文檔。

壓縮XML文檔

盡管SharpZipLib能夠執行好幾種類型的壓縮,但我還是決定在范例程序中使用應用最為廣泛的ZIP壓縮格式,因為它很有名,也很好用。為了使代碼能夠被重用,我寫了一個名為Zipper的自定義類。Zipper中有一個名為GenerateZipFile()的靜態方法(它可以接受指定要保存ZIP文件的路徑)以及一個包括所有要壓縮的文件路徑集合的ArrayList(見列表1)。

Zipper類是SharpZipLib中名為ZipOutputStream類的一個封裝類。你幾乎不用寫什么代碼,也不用花什么力氣就可以用Zipper來將多個文件壓縮到一個簡單的ZIP存檔文件中(一個帶有ZIP擴展名的文件)。這個GenerateZipFile()方法是通過建立一個ZipOutputStream類的實例并通過其SetLevel屬性設置壓縮級別來實現壓縮的。最高壓縮級別可以被設置到9,而最低則為0。

設置好壓縮級別之后,由ArrayList(被傳入GenerateZipFile())方法)所指定的文件內容就會被處理。一個生成的計數器(enumerator)會逐個列舉該列表中的文件。每個文件被加載到一個接受文件名和登錄時間的ZipEntry對象中。然后ZipEntry對象通過PutNextEntry()方法被添加到ZipOutputStream對象中。

在文件名被添加到這個ZIP存檔文件之后將通過一個FileStream對象來讀取其內容。FileStream(位于System.IO命名空間下)用于將文件以字節形式讀入到緩沖區中。你可以通過調用FileStream對象中的Read()方法來完成讀取操作。在緩沖區中的字節通過Write()方法被寫入ZipOutputStream對象中。注意Write()方法接受要寫入數據流中字節的長度以及在緩沖區中的起始位置。該過程適用于所有包含在傳給GenerateZipFile()方法的ArrayList參數之中的每一個文件。 當所有條目被添加到這個ZIP文件之后,它會以一個ZIP作為文件擴展名被保存到硬盤中。

列表2中顯示了一個用于測試Zipper類的簡單ASP.Net應用程序的代碼(見圖1)。它是從定義一個要被壓縮的XML文檔路徑和存儲ZIP文件的路徑開始的。盡管在這個例子中只有一個被壓縮的XML文檔,但是其他文檔的路徑可以被添加到ArrayList對象中來進行壓縮。在所有文件路徑被定義好之后,將會調用靜態方法GenerateZipFile()。一旦這個ZIP文件被建好之后,會通過System.Web.Mail命名空間下的類來給最終用戶發送一封e-mail。

解壓XML文檔

對XML文檔進行壓縮的能力在不同的情況下是非常有用的,但不可避免地會出現這種情況:有人給你發送了一個在解析前需要被展開的(extracted)的壓縮文檔。這個問題可以直接通過使用SharpZipLib中的一個名為ZipFile的類來解決。在列表3中你可以看到在這個用于將壓縮文件展開到一個指定目錄下的Zipper類中有一個名為ExtractZipFile()的靜態方法。代碼首先通過將一個FileStream對象(通過調用File.Open()方法得到的)傳入ZipFile類的構造器中來建立一個ZipFile實例。建立好對象之后,ZIP文件中的每個ZipEntry會被列舉(enumerate)出來。然后調用ZipFile對象的GetInputStream()方法,該方法接受一個要被展開的ZipEntry作為參數。從GetInputStream()返回的數據流被讀取到一個緩沖區中,該緩沖區通過一個FileStream被寫入到文件里。在調用GetInputStream()時,該ZipFile類會自動對ZipEntry進行解壓。

在調用ExtractZipFile()方法之后,所有位于ZIP文件中的被壓縮文件會被展開并存儲到硬盤上。另外,解壓的字節流會被寫入一個MemoryStream對象中,這在文件被解析前無需被保存到硬盤上時非常有用。

盡管XML是一個很冗長的元數據語言,但大的文檔可以在使用.Net組件(比如SharpLibZip)后被壓縮成一個很小的文檔。通過對這些文檔進行壓縮,可以縮短不同實體間文檔交換的時間,其結果是能夠更快地處理數據。想要試試這個很好的壓縮/解壓代碼的例子,你可以訪問www.xmlforasp.net/codeSection.aspx?csID=95。

關于作者:
Dan Wahlin(是ASP.NET方面的Microsoft MVP)是Wahlin Consulting LLC公司的總裁并創辦了XML for ASP.NET Developers網站(www.XMLforASP.NET),其中主要研究如何在Microsoft的.Net平臺下使用XML和Web services。他還是一名合作培訓師和演講者,并在美國各地教授“public and on-site XML and .Net”培訓課程。Dan是Professional Windows DNA (Wrox)、ASP.NET Tips、Tutorials 和Code (Sams)等書的合著者,并著有XML for ASP.NET Developers (Sams)一書。他的聯系方式是dwahlin@xmlforasp.net。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
77777亚洲午夜久久多人| 亚洲视频在线观看网站| 成人国产精品一区| 欧美与黑人午夜性猛交久久久| 亚洲国内高清视频| 国产精品久久久久久久美男| 91亚洲国产成人久久精品网站| 国产精品吹潮在线观看| 日韩电视剧免费观看网站| 国产成人啪精品视频免费网| 国产精品美女久久久久久免费| 久久久久久高潮国产精品视| 成人午夜在线影院| 国产精品亚洲欧美导航| 国产精品老女人视频| 日韩精品一区二区三区第95| 国产日产欧美精品| 欧美日韩亚洲激情| 国产亚洲激情在线| 亚洲精品国产精品自产a区红杏吧| 最近中文字幕mv在线一区二区三区四区| 国产欧美最新羞羞视频在线观看| 欧美精品videos另类日本| 国产精品色婷婷视频| 日韩女优人人人人射在线视频| 色噜噜狠狠色综合网图区| 久久97精品久久久久久久不卡| 中文字幕在线观看亚洲| 琪琪第一精品导航| 欧美性jizz18性欧美| 国产在线视频不卡| 日韩一区二区av| 国产网站欧美日韩免费精品在线观看| 欧美俄罗斯性视频| 亚洲天堂av高清| 欧美黑人一级爽快片淫片高清| 亚洲精品久久久一区二区三区| 国产成人午夜视频网址| 全色精品综合影院| 狠狠爱在线视频一区| 国产精品电影网| 国产在线观看不卡| 国内精品国产三级国产在线专| 国产久一一精品| 国产精品pans私拍| 欧美日韩另类视频| 亚洲欧洲美洲在线综合| 在线日韩日本国产亚洲| 最近2019中文字幕第三页视频| 伊人久久精品视频| 亚洲男人的天堂网站| 亚洲乱亚洲乱妇无码| 国产精品美腿一区在线看| 91久久综合亚洲鲁鲁五月天| 欧美一级片在线播放| 国产精品欧美激情| 日韩中文在线中文网在线观看| 中文字幕av一区二区| 久久综合伊人77777| zzijzzij亚洲日本成熟少妇| 国产精品中文字幕在线| 亚洲天堂视频在线观看| 美日韩在线视频| 日韩精品日韩在线观看| 欧美日韩精品国产| 亚洲人成电影网站色www| 国产福利精品在线| 在线观看中文字幕亚洲| 久久久久久久国产精品视频| 欧美日韩国产精品一区二区不卡中文| 一区二区欧美在线| 国产91精品久久久久久久| 亚洲激情视频在线| 久久香蕉国产线看观看av| 91久久国产婷婷一区二区| 国产亚洲免费的视频看| 精品久久久久人成| 色琪琪综合男人的天堂aⅴ视频| 国产欧美日韩精品在线观看| 97av视频在线| 精品亚洲一区二区| zzijzzij亚洲日本成熟少妇| 国产91网红主播在线观看| 欧洲日本亚洲国产区| 国产日韩中文在线| 美女福利精品视频| 亚洲精品国产suv| 热99在线视频| 亚洲一级一级97网| 成人av资源在线播放| 国产91网红主播在线观看| 亚洲一区www| 久久成人在线视频| 亚洲欧洲高清在线| 久久伊人精品一区二区三区| 日韩美女主播视频| 色妞久久福利网| 日本久久中文字幕| 欧美日韩不卡合集视频| 日韩中文字幕免费看| 久久大大胆人体| 国产免费一区二区三区在线观看| 97视频免费观看| 日本不卡视频在线播放| 欧美性少妇18aaaa视频| 亚洲美女在线看| 国产精品久久久久久av下载红粉| 色琪琪综合男人的天堂aⅴ视频| 亚洲免费视频观看| 日韩精品中文在线观看| 最新的欧美黄色| 国产精品专区h在线观看| 精品中文字幕在线观看| 岛国精品视频在线播放| 欧美在线www| 自拍偷拍亚洲区| 久热精品视频在线观看一区| 国产精品pans私拍| 91久久精品在线| 亚洲精美色品网站| 久久久国产影院| 欧美尤物巨大精品爽| 精品久久久香蕉免费精品视频| 国产精品久久不能| 77777亚洲午夜久久多人| 欧美日韩性生活视频| 日韩美女在线观看一区| 中文字幕亚洲欧美一区二区三区| 日韩网站免费观看高清| 国产精品久久久久久av福利| 欧洲s码亚洲m码精品一区| 国产欧美最新羞羞视频在线观看| 亚洲欧洲日产国码av系列天堂| 国产91在线高潮白浆在线观看| 97在线免费观看视频| 国产精品美女久久| 欧美在线性视频| 欧美孕妇孕交黑巨大网站| 欧美综合第一页| 国产精品视频男人的天堂| 日韩欧美成人网| 国产精品久在线观看| 一区二区在线免费视频| 国内精久久久久久久久久人| 91久久精品国产91性色| 国产精品精品一区二区三区午夜版| 日韩小视频在线| 欧美亚洲免费电影| 欧美在线视频观看| 国产亚洲激情视频在线| 日韩欧美综合在线视频| 日韩中文字幕在线| 国产精品电影网| 在线成人激情视频| 中文字幕久久久av一区| 亚洲天堂av图片| 97久久精品视频| 91精品综合久久久久久五月天| 97超碰色婷婷| 久久亚洲影音av资源网| 欧美激情精品久久久久久黑人| 亚洲一区国产精品| 久久男人的天堂| 亚洲字幕在线观看|