【问题标题】:Resumable XML parsing可恢复的 XML 解析
【发布时间】:2012-05-25 15:21:37
【问题描述】:

我有一个解析大型 XML 的数据导入工具(它使用 SAX 解析器,但适应是我的问题中最少的一个)。发生故障、新部署、系统重启,我不想完全重新开始,所以我需要不时保存解析器状态(如果需要,我们可以将其称为 XML 游标)。

是否有任何解析器能够保存它们的状态并恢复它们(显然我必须在恢复时搜索文件)?

我还没有找到这样的解析器,所以我对此表示怀疑,所以这是我的第二个问题:您对我应该如何开始实施它有什么建议吗?采用 SAX 解析器实现并深入研究,或者我最好从头开始?

如果重要,我需要 xml 命名空间,但不需要模式/DTD 检查。

游标还可以用于预解析 xml 和分配工作以进行并行处理。

【问题讨论】:

  • 发生故障?它不应该以您需要再次解析所有 xml 的方式发生,现在应该吗?
  • 也许不是失败。我们称之为系统重启。部署新版本的应用程序。
  • 你能指定什么样的失败? IO 故障? XML 解析失败?
  • 这种故障是否与崩溃和应用程序退出一样?,所以当您重新运行文件解析器时,您希望在最后一个成功解析的节点的下一个兄弟节点上恢复?
  • 这不仅仅是失败(见上文,而且我已经编辑了问题)。我不介意重新解析几百个条目,但不是全部。

标签: java xml xml-parsing


【解决方案1】:

真的取决于内容,你能不能写一个 XQuery 来明确地找到文件中的一个节点。

例如<Item id="1000"/>

如果在成功解析节点后保留它,那么当您继续传递它时(null 等于从第一个开始)。然后移动到目标节点,移动到下一个,然后在 y va 上。

【讨论】:

  • 这是一个选项,但它仍然需要进行全面扫描,直到我在输入文件中的位置。我确实有带有 id 的记录,但我发现这无关紧要,因为不扫描就无法依赖它们。
  • 我能想到的唯一其他选择是您是否可以访问文件流并获得位置以进行搜索,尽管这有点不确定。分解文件,或试图使其更强大将是横向思维选项
猜你喜欢
  • 2011-09-21
  • 2021-02-04
  • 1970-01-01
  • 2021-02-28
  • 2011-07-19
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
相关资源
最近更新 更多