【发布时间】: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
【问题讨论】: