关联大型XML文档中的数据

时间:2011-11-02 09:10:14

标签: java sax

我的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的格式。

1 个答案:

答案 0 :(得分:1)

除了哈希映射之外,SAX解析器不需要在内存中保留很多。我会SAX解析索引元素以生成List<Item>,然后对于每个item元素,我可以从列表中删除该项(断言它在那里,删除它)然后添加到Map<Item,List<Cell>>。< / p>

您将需要的内存是项目总数和每个单元格的条目。我不认为你需要保持比使用SAX解析时更多的上下文。