6

我有一个如下的 XML

<Jobs>
   <job>
   ....
   </job>
   <job>
   ....
   </job>
   ....
</Jobs>

现在,在不使用 xmlreader 和 xmlwriter 或任何其他选项将整个文件放入内存的情况下,将每个作业节点写入单独文件中的最佳方法是什么?

4

3 回答 3

3
  1. 为输入文件创建一个 XmlReader。
  2. 将阅读器放在第一个作业元素上。
  3. 使用ReadSubtree 方法创建子树 XmlReader 。
  4. 为输出文件创建一个 XmlWriter。
  5. 使用WriteNode 方法将子树 XmlReader 的内容复制到 XmlWriter 中。
  6. 将原始阅读器放在下一个作业元素上,像第一个作业元素一样继续。
    如果没有更多要阅读的工作元素,请中断。
于 2012-08-04T05:51:45.053 回答
2

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>
于 2012-08-05T08:14:02.907 回答
0

如果数据确实看起来与您描述的完全一样(包括空格),那么最好的选择是使用 StreamReader。它有一个读取到当前行末尾的方法。您阅读行,直到到达</job>. 然后冲洗该工作并重复。

另外,我不认为 XmlReader 是一个糟糕的选择。

于 2012-08-04T05:52:50.310 回答