2017-08-14 51 views
1

在我們的應用程序中,我們需要多次從XML中檢索數據。我們撥打服務電話,以xml格式獲取數據並保存在內存中。之後,我們需要多次使用元素名稱或屬性名稱檢索數據,這使得每次都分析xml這不是一個好方法。多次從XML中提取數據的最佳方法是什麼?

我們只限於在內存中保存爲字符串,也不能使用Spring或任何框架,所以我們可以將其保存爲xml或將String轉換爲某種格式並解析該String。這些都是選擇我能想到關:

  1. 解析每一個我們需要檢索值時XML。
  2. 使用解析器從XML中提取所需數據,並將其保存爲字符串格式的映射並使用自定義代碼解析映射數據。
  3. 將大XML轉換爲小XML並每次解析該小XML。
  4. 字符串拆分函數。

感激,如果任何人可以提出快速的方法來檢索字符串

+0

你試過正則表達式嗎?你能舉一個例子來說明你需要從中提取什麼? – IddoE

+0

我們有複雜的XML,可以有1000多行,這裏是示例xml。 abcd cdef 。對於一種情況,我們需要提取名字值,而在另一種情況下,我們需要提取ID。 – Mr9

+0

爲什麼在將數據保存爲字符串時存在約束?可能它也是字節[]? – ThomasRS

回答

0

數據因此,這裏是我得到的印象:你需要一個XML文件的連載內容存儲在String類型的變量,你需要最快的方式來做到這一點。

假設數組或鏈接的字符串列表不被允許,您可以將XML轉換爲JSON,這比解析XML更快,更容易緩存,並且體積更小。生成的JSON將被縮小並存儲在一個字符串中。

例如,XML

<data> 
    <list> 
     <item>Item A</item> 
     <item>Item B</item> 
    </list> 
</data> 

可能成爲

{"data":{"list":{"item":["a","b"]}}} 

注意如何小得多比的XML,特別是考慮到這一事實,有隻打開了「標籤」,而不是關閉就像XML中所需要的那樣。存儲轉換的JSON數據的字符串會佔用更少的內存(並且數據量更大,數據量更大),解析速度更快。此外,JSON是在線數據傳輸標準,並超越XML在許多領域,特別是在大型數據集或有相當的水平中的對象的複雜性被存儲。

下面是一些關於這個論題更多閱讀:

JSON VS XML具有視

https://www.w3schools.com/js/js_json_xml.asp

「JSON一個面向Web的點:無脂肪替代XML 「

http://www.json.org/xml.html

JSON和XML

https://www.sitepoint.com/json-vs-xml/

之間的客觀比較希望我幫助!如果您有任何問題,請告訴我。

編輯: 我剛纔看到你的問題,你的XML存儲非常大的數據集,您的評論。在這種情況下,我不推薦使用任何類型的序列化,而是將數據存儲在數據庫中(爲了您的需要,我認爲像MongoDB這樣的工作最好,因爲它的非結構化方法和適合於大數據集)並且僅提取您目前需要的記錄放入更小的JSON,XML字符串,甚至是您使用的任何語言的類的數組。

+0

謝謝柏拉圖。所以你建議轉換爲JSON格式並解析JSON字符串而不是xml?此外,我們正在調用服務調用來獲取數據,並且再次將數據存儲在數據庫中對我們來說不是一種選擇。 – Mr9

+0

@ Mr9是的,我肯定會推薦轉換爲JSON格式並解析爲直接XML解析JSON字符串。 – Plato

0

變換你的大數據集的一個小數據集。使用有效的串行器/解析器。做拉解析和序列化,避免對象綁定(DOM /註釋對象)。當你有你想要的東西,如果可能的話

停止解析。可能安排您的數據,即排序,以實現這一目標。

JSON或XML是次要的。

1

因爲我是VTD-XML的作者,我必須承認,我的觀點可能會有所偏差。但VTD-XML非常適合您的使用案例。

讓我解釋更多:

*第一解析不會是一個大問題,因爲與DOM與VTD-XML。

  • 您也可以選擇堅持解析後的結果與VTD-XML的內置的索引。基本上,如果你可以重複使用同一個xml而不需要多次解析它...這對於這個非常方便...只需將.vxl文件加載到內存中即可。 VTD-XML有兩部分,XML(人類可讀的文字XML)。另一個是二進制索引部分作爲解析的輸出。

  • 由於VTD-XML使用比DOM內存少得多。你的觀點#3可能變得沒有必要。

  • 而且VTD-XML的索引strucuture是超級容易理解。它可以寫在火柴盒的背面。

  • 而且VTD-XML是完美的大XML拆分,如果你瞭解它的基本原則......

讓我知道如果你有任何問題。

相關問題