【发布时间】:2012-08-27 13:34:35
【问题描述】:
我有一个像下面这样的 XML
<Jobs>
<job>
....
</job>
<job>
....
</job>
....
</Jobs>
现在最好的方法是将每个作业节点写入一个单独的文件而不带来整个文件 使用 xmlreader 和 xmlwriter 或任何其他选项将文件写入内存?
【问题讨论】:
我有一个像下面这样的 XML
<Jobs>
<job>
....
</job>
<job>
....
</job>
....
</Jobs>
现在最好的方法是将每个作业节点写入一个单独的文件而不带来整个文件 使用 xmlreader 和 xmlwriter 或任何其他选项将文件写入内存?
【问题讨论】:
【讨论】:
XSLT 3.0 和流式传输还处于早期阶段,但以下 XSLT 3.0 样式表应该可以在 Saxon-EE 9.4 中完成这项工作:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:mode streamable="yes" on-no-match="shallow-copy">
<xsl:template match="job">
<xsl:result-document href="job{position()}.xml">
<xsl:next-match/>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
【讨论】:
如果数据确实与您描述的完全一样(包括空格),那么最好的选择是使用 StreamReader。它有一个读取到当前行末尾的方法。您阅读行,直到到达</job>。然后刷新该作业并重复。
另外,我不认为 XmlReader 是一个糟糕的选择。
【讨论】: