【问题标题】:Compute, convert and compile XML to CSV using JAVA使用 JAVA 计算、转换和编译 XML 为 CSV
【发布时间】:2011-12-17 16:30:50
【问题描述】:

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

XPath 已被建议作为 SAX2 的替代方案,但由于最终的 CSV 输出很大(基于 100 多个 XML 文件),我对使用数组犹豫不决。 (堆栈溢出:Convert XML file to 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>    
<....

伪伪代码

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 输出示例

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

【问题讨论】:

    标签: java xml sax saxparser


    【解决方案1】:

    我建议使用JDOM 将 XML 读入内存。然后,您可以使用常规 Java 语法以编程方式非常轻松地访问它。之后,您可以使用任何库轻松创建 CSV 文件。我个人使用opencsv

    如果您关心的是内存使用情况,最重要的事情是一次在内存中保留尽可能少的 XML 文件。如果你一个一个地读取文件,然后只将你需要的信息存储在其他数据结构中,你应该没问题。例如,您可以创建一个以 ID 为键的起始值 Map 和一个以 ID 为键的停止值的 Map。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-13
      • 2015-06-28
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 2016-07-21
      相关资源
      最近更新 更多