如何更新大型XML文件

而不是在更新单个元素时重写xml文件的全部内容,是否有更好的替代方法来更新文件?

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

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

为什么我应该将VTD-XML用于大型XML文件?

由于众多原因总结如下:

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

为了利用VTD-XML,我们建议开发人员将超大型XML文档拆分为更小,更易于管理的卡盘(<2GB)。

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

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

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

你有几个选择,但没有一个是好的。

由于XML对象不会分成不同的部分,因此您必须使用正则表达式模式匹配的某些文件系统级别修改(sed是一个良好的开端),或者您应该将xml分解为更小的部分以实现可管理性。

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

使用XQuery处理大型XML文件与Gigabyte大小的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平台的任何环境中运行。