【问题标题】:How to update large XML file如何更新大型 XML 文件
【发布时间】:2010-09-08 21:52:45
【问题描述】:

更新单个元素时,与其重写 xml 文件的全部内容,还有更好的替代方法来更新文件吗?

【问题讨论】:

  • 文件有多大?它可以放入内存吗?

标签: java xml


【解决方案1】:

使用 XQuery 处理大型 XML 文件适用于千兆字节大小的 XML 文件 http://www.xquery.com

XQuery 是一种被设计为原生 XML 查询语言的查询语言。因为大多数类型的数据都可以表示为 XML,所以 XQuery 也可以用于查询其他类型的数据。例如,XQuery 可用于使用关系数据库的 XML 视图查询关系数据。这很重要,因为许多 Internet 应用程序需要集成来自多个源的信息,包括 Web 消息中的数据、关系数据和各种 XML 源。 XQuery 专为这种数据集成而设计。

例如,假设您的公司是一家金融机构,需要为每个客户生成股票持有报告。客户端使用简单对象访问协议 (SOAP) 消息请求报告,该消息以 XML 表示。在大多数企业中,持股数据存储在多个关系数据库中,例如 Oracle、Microsoft SQL Server 或 DB2。 XQuery 可以查询 SOAP 消息和关系数据库,以 XML 格式创建报告。

XQuery 基于 XML 的结构,并利用该结构可以对可以表示为 XML 的任何类型的数据(包括关系数据)执行查询。此外,XQuery API for Java (XQJ) 让您的查询可以在任何支持 J2EE 平台的环境中运行。

【讨论】:

    【解决方案2】:

    如果您的 XML 文件太大以至于更新它成为性能瓶颈,您应该考虑从 XML 转移到更高效的磁盘格式(或真正的数据库)。

    但是,如果您只是觉得这可能是个问题,请记住优化规则:

    1. 不要这样做
    2. (仅限专家)暂时不要这样做。

    【讨论】:

      【解决方案3】:

      我建议使用 VTD-XML http://vtd-xml.sourceforge.net/

      来自他们的常见问题解答 (http://vtd-xml.sourceforge.net/faq.html):

      为什么要对大型 XML 文件使用 VTD-XML?

      出于多种原因总结如下:

      • 性能:VTD-XML 的性能远优于 SAX
      • 易于使用:随机访问与 XPath 相结合使应用程序易于编写
      • 更好的可维护性:应用代码更短,更易于理解。
      • 增量更新:偶尔的小改动会变得非常高效。
      • 索引:XML 的预解析形式将进一步提高处理性能。
      • 其他功能:只有使用 VTD-XML 才能剪切、粘贴、拆分和组装 XML 文档。

      为了利用 VTD-XML,我们建议开发人员将他们的超大型 XML 文档拆分为更小、更易于管理的文件 (

      【讨论】:

        【解决方案4】:

        如果可能,序列化 XML 并使用 diff/patch/apply Linux 工具(或您平台中的等效工具)。这样,您不必处理解析、写入。

        【讨论】:

          【解决方案5】:

          这里有几个选项,但没有一个是好的。

          由于 XML 对象没有被分成不同的部分,您要么必须使用一些文件系统级别的修改和正则表达式模式匹配(sed 是一个好的开始),要么您应该将您的 xml 分成更小的部分以便于管理。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-17
            • 2011-04-28
            • 1970-01-01
            • 1970-01-01
            • 2012-06-17
            • 1970-01-01
            相关资源
            最近更新 更多