我的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解析器,一个在索引上运行,另一个解析数据。问题是我不知道如何暂停一个解析器,启动另一个,暂停另一个,重新启动第一个等等。
这可能还是有更好的方法来解决这个问题?
BTW:遗憾的是,我完全无法控制XML的格式。答案 0 :(得分:1)
除了哈希映射之外,SAX解析器不需要在内存中保留很多。我会SAX解析索引元素以生成List<Item>
,然后对于每个item元素,我可以从列表中删除该项(断言它在那里,删除它)然后添加到Map<Item,List<Cell>>
。< / p>
您将需要的内存是项目总数和每个单元格的条目。我不认为你需要保持比使用SAX解析时更多的上下文。