Вычислять, конвертировать и компилировать XML в CSV, используя JAVA - PullRequest
0 голосов
/ 17 декабря 2011

Мне нужно конвертировать и компилировать несколько файлов XML (в стандартном формате) в один файл CSV. Поскольку мне также необходимо выполнить вычисления для некоторых импортированных элементов, XSLT не является опцией (Stackoverflow: XML в CSV с использованием XSLT ), если только я не выполняю вычисления для каждого преобразованного файла CSV.

XPath был предложен в качестве альтернативы SAX2, но, поскольку конечный выход CSV велик (на основе более 100 файлов XML), я не решаюсь использовать массивы. (Stackoverflow: Преобразование файла XML в CSV )

Используя SAX2, я несколько успешно извлек элементы тега.

Если бы я мог добавить вывод - для каждого отдельного файла - к окончательному выводу CSV, я предполагаю, что у меня будет приложение с более стабильной памятью.

Я надеюсь, что другим было бы полезно узнать ответ на вопрос: как я могу эффективно обрабатывать вычисления в сочетании с преобразованиями XML-CSV для крупномасштабных данных?

XML-файл 1

<element id="1">
    <info>Yes</info>
    <startValue>0</startValue> <!-- Value entered twice, ignore--!>
    <startValue>256</startValue>
    <stopValue>64</stopValue>
</element>
<element id="2">
    <info>No</info>
    <startValue>50</startValue>
    <stopValue>25</stopValue>
</element>
<....

XML-файл 2

<element id="1">
    <info>No</info>
    <startValue>128</startValue>
    <stopValue>100</stopValue>
</element>    
<....

Pseudopseudocode

for all files

    get ID
    get info

    for all stop and start values
        ignore wrong values: use counter
        difference[] = startValue(i) - stopValues(j) = 196, 28

    append (ID, info and difference) to file "outputfile.csv"

Пример CSV Eutput

File    ID  Info    Difference  Etc
_________________________________________________ 
0       1   Yes     196         ....
0       2   No      25          ....
1       1   No      28          ....
.           ...     ...         ....
.           ...     ...         ....
nfiles

1 Ответ

0 голосов
/ 17 декабря 2011

Я бы рекомендовал использовать JDOM для чтения XML в память. Тогда вы можете очень легко получить к нему программный доступ, используя обычный синтаксис Java. После этого вы можете использовать любую библиотеку, чтобы легко создать файл CSV. Лично я пользуюсь opencsv .

Если вас беспокоит использование памяти, самое важное - сохранить как можно меньше файлов XML в памяти за один раз. Если вы читаете файлы по одному, а затем сохраняете только ту информацию, которая вам нужна, в какой-то другой структуре данных, у вас все будет хорошо. Например, вы можете создать Карту начальных значений с ключом ID и Карту конечных значений с ключом ID.

...