5

我正在创建一个非常大的 XML 文件(700mb +),它通过批处理处理大量数据。该程序充当超大型 sybase 数据库和应用程序之间的接口。我目前将 xsd 模式绑定到类。我需要一种能够在考虑重启逻辑的情况下编写 XML 的方法。

IE 能够知道我离开的地方。或者换句话说,如果程序失败,我需要能够查看最后写入 XML 文件的内容,以便它可以从我离开的地方继续。这是一个例子。

<root>
  <WorkSet>
    <Work>
      <Customer>
    <Work>
      <Customer>
  <WorkSet>
    <Work>
      .....
<root>

假设程序在写入写入“工作”或“工作集”节点后失败。有没有办法从我停止处理的地方继续?由于 XML 文件的剪切大小,我试图避免将 XML 文件读回内存(假设它完成了 500mb 的 XML 并失败)。

谢谢您的帮助。

4

2 回答 2

3

如果您可以将数据拆分为独立的 WorkSet 元素,则可以使用 JAXB 的片段模式(当 JAXB 不写入标头时)一次将它们写出。稍后只需连接文件并添加缺少的 XML 声明,打开结束结束标记。

您可能必须为此修改生成的类。我的意思是添加@XmlRootElement到 WorkSet java 类。如果一个 WorkSet 对于一个步骤来说仍然很大,您也可以使用 Work 执行此操作,但您必须以某种方式生成丢失的标签。

于 2011-09-13T20:11:38.673 回答
2

我不认为 JAXB 是适合这项工作的工具,但是......

您可以编写一个自定义 Marshaller 实现来跟踪已编组的对象并使用片段模式写出单个对象。

于 2011-09-13T18:15:38.413 回答