我有一个如下的 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 是一个糟糕的选择。