2012-06-14 68 views
0

我有一個客戶端/服務器應用程序,其中數據以XML格式進行交換。數據大小約爲50MB,其中大部分由XML標籤本身組成。有沒有辦法把生成的XML和索引節點名稱如下:最小化XML文件的大小

<User><Assessments><Assessment ID="1" Name="some name" /></Assessments></User> 

到:

<A><B><C ID="1" Name="some name" /></B></A> 

這將節省膨脹數量驚人的。

編輯
該數據是從實體框架對象中序列化的。選擇XML作爲協議的原因是.NET中的內在支持,以及FromXml和ToXml的智能代碼生成,以避免實體繞過循環引用。

+1

這樣做是沒有意義的,除非你有辦法再次撤銷壓縮。整個文件只是隨機的字母而不是標籤。 – OptimusCrime

+3

GZipStreaming的內容看起來更簡單。更改xml節點名稱會更改xml內容的含義。 –

+0

你擔心的是什麼?是當它們被持久化到磁盤(壓縮它們),當它們被傳輸(壓縮它們)時,還是當它們在內存中被處理時? – paul

回答

0

我最後寫一個小的類,重命名節點名稱,並創建一個映射元素使這個過程可以也顛倒了。僅憑這一點,文件就從50MB降到了10MB。

壓縮文件將是下一步,但我想知道我可以使用二進制序列化多少空間。以前沒有嘗試過。

4

剛剛在客戶端和服務器之間壓縮/解壓縮數據流怎麼辦?這比實現xml數據的自定義轉換更容易實現,並且更容易出錯。

1

你可以看看爲你的數據使用屬性而不是元素。例如,如果你有「性別」作爲一個屬性,你會得到:

<person gender="female"> 
    <firstname>Anna</firstname> 
    <lastname>Smith</lastname> 
</person> 

而如果它是一個元素,您將獲得:

<person> 
    <gender>female</gender> 
    <firstname>Anna</firstname> 
    <lastname>Smith</lastname> 
</person> 

這不是嚴格正確的,但將實現你是什麼後。

1

XML的重點在於,您不需要壓縮/最小化數據。如果你需要儘量減少線路上發生的事情,那麼你很有可能使用錯誤的協議。

很明顯,你可以通過gzip流來傳遞這個信息,這會給你帶來巨大的優勢,但是如果你想擠出更多的信息,那麼它可能值得看看JSON甚至是二進制格式。

XML被設計爲可被人類閱讀,並通過消除可讀性,然後從根本上消除首先使用XML的一個主要原因。

0

或者,你也可以考慮json,而不是xml,這將需要尺寸更小相比,xml