2011-11-02 56 views
1

我有一個XML結構是這樣的:數據關聯文件

<root> 
    <index> 
     <item>item 1</item> 
     <item>item 2</item> 
     <!-- many more items --> 
    <index> 
    <data> 
     <row> 
      <!-- relates to item 1 --> 
      <cell>1</cell> 
      <cell>2</cell> 
      <!-- many more cells --> 
     </row> 
     <row> 
      <!-- relates to item 2 --> 
      <cell>3</cell> 
      <cell>4</cell> 
      <!-- many more cells --> 
     </row> 
     <!-- as many rows as there are items in the index -->  
    </data> 
</root> 

我試圖創建一個解析器輸出(到一個數據庫)這樣的結構:

item 1 : [1, 2, ...] 
item 2 : [3, 4, ...] 
... 

通常情況下,我會使用sax解析器,構造一個HashMap,當解析器傳遞索引元素時填充鍵,然後添加單元格數據。

但是,該文檔可能包含大量數據,所以我恐怕會遇到內存問題。

我的問題是:我如何用盡可能少的內存使用來解析文件?

我想過的一件事是構建兩個SAX解析器,一個運行在索引上,另一個解析數據。問題是我不知道如何暫停一個分析器,啓動另一個分析器,暫停另一個分析器,重新啓動第一個分析器等等。

這是可能的還是有更好的方法來處理這個?

順便說一句:遺憾的是,我完全不能控制XML的格式。

+0

imho解析xml在你的情況下不會是最耗費內存的操作。我會注意數據庫操作和事務支持。也可能不收集數據集合/地圖(或收集最小數據),而是將其快速刷新到數據庫是有意義的?如果您使用某種ORM解決方案,您應該着眼於ORM會話管理和刷新活動。 – svaor

回答

1

SAX解析器不需要在哈希映射以外的內存中保留很多內容。我會SAX解析index元素來生成List<Item>,然後對於每個item元素,我可以從列表中刪除該項目(聲明它在那裏,刪除它),然後添加到Map<Item,List<Cell>>

您將需要的內存是項目總數和每個單元格的條目。我認爲在使用SAX解析時,您不需要維護更多的上下文。

+0

Jeff&svaor,你說得對。這是我不應該擔心的一些不成熟的優化。 – Peter