使用JAVA计算、转换XML并将其编译为CSV

使用JAVA计算、转换XML并将其编译为CSV,java,xml,sax,saxparser,Java,Xml,Sax,Saxparser,我需要将多个XML文件(标准格式)转换并编译为单个CSV文件。因为我还需要对一些导入的元素执行计算,所以XSLT不是一个选项(Stackoverflow:),除非我对每个转换的CSV文件执行计算 有人建议使用XPath替代SAX2,但由于最终的CSV输出很大(基于100多个XML文件),因此我不太愿意使用数组。(堆栈溢出:) 使用SAX2,我在提取标记元素方面取得了一些成功 如果我可以为每个单独的文件将输出附加到最终的CSV输出中,我假设我会有一个内存更稳定的应用程序 我希望其他人能从这个问题的

我需要将多个XML文件(标准格式)转换并编译为单个CSV文件。因为我还需要对一些导入的元素执行计算,所以XSLT不是一个选项(Stackoverflow:),除非我对每个转换的CSV文件执行计算

有人建议使用XPath替代SAX2,但由于最终的CSV输出很大(基于100多个XML文件),因此我不太愿意使用数组。(堆栈溢出:)

使用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>
<....
CSV示例

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"
File    ID  Info    Difference  Etc
_________________________________________________ 
0       1   Yes     196         ....
0       2   No      25          ....
1       1   No      28          ....
.           ...     ...         ....
.           ...     ...         ....
nfiles
我建议使用将XML读入内存。然后,您可以非常轻松地使用常规Java语法以编程方式访问它。之后,您可以使用任何库轻松创建CSV文件。就我个人而言,我使用

如果您关心的是内存使用,那么最大的问题就是一次在内存中保存尽可能少的XML文件。如果您一个接一个地读取这些文件,然后只将所需的信息存储在其他数据结构中,那么就可以了。例如,您可以创建由ID键控的开始值映射和由ID键控的停止值映射

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