Соотнесите данные в большом документе XML - PullRequest
1 голос
/ 02 ноября 2011

У меня есть структура 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, ...]
...

Обычно я использую синтаксический анализатор, создаю HashMap, заполняю ключи, когда синтаксический анализатор проходит элемент index, а затем добавляет данные ячейки.

Однако документ может содержать много данных, поэтому яБоюсь, у меня возникнут проблемы с памятью.

У меня такой вопрос: как мне проанализировать файл с минимальным использованием памяти, насколько это возможно?

Одна вещь, о которой я подумал, - это создать два SAXпарсеры, один работает над индексом, а другой анализирует данные.Проблема в том, что я понятия не имею, как я могу приостановить один парсер, запустить другой, приостановить другой, перезапустить первый и т. Д.

Возможно ли это или есть более эффективные способы борьбы с этим?

Кстати: к сожалению, я абсолютно не контролирую формат XML.

1 Ответ

1 голос
/ 02 ноября 2011

Для синтаксического анализатора SAX не нужно хранить много памяти, кроме хеш-карты.Я бы SAX проанализировал элемент index для генерации List<Item>, а затем для каждого элемента item мог бы удалить элемент из списка (подтвердить, что он там есть, удалить его), а затем добавить к Map<Item,List<Cell>>.

* 1004.* Память, которая вам понадобится, - это общее количество элементов и запись для каждой ячейки.Я не думаю, что вам нужно поддерживать намного больше контекста, чем при анализе с использованием SAX.
...