如何更新大型XML文件

时间:2020-03-05 18:53:20  来源:igfitidea点击:

除了在更新单个元素时重写xml文件的全部内容之外,还有没有更好的替代方法来更新文件?

解决方案

回答

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

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

Why should I use VTD-XML for large XML files?
  
  For numerous reasons summarized below:
  
  
  Performance: The performance of VTD-XML is far better than SAX
  Ease to use: Random access combined with XPath makes application easy to write
  Better maintainability: App code is shorter and simpler to understand.
  Incremental update: Occasional, small changes become very efficient.
  Indexing: Pre-parsed form of XML will further boost processing performance.
  Other features: Cut, paste, split and assemble XML documents is only possible with VTD-XML.
  
  
  In order to take advantage of VTD-XML, we recommended that developers split their ultra large XML documents into smaller, more manageable  chucks (<2GB).

回答

我们在这里有几个选择,但都不是一个好选择。

由于XML对象没有分成不同的部分,因此我们或者必须使用带有正则表达式模式匹配的文件系统级修改(sed是一个好的开始),或者我们应该将xml分成较小的部分以提高可管理性。

回答

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

回答

如果XML文件太大而不能进行更新成为性能瓶颈,则应考虑从XML转移到更高效的磁盘格式(或者实际数据库)。

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

  • 不要做
  • (仅限专家)暂时不要这样做。

回答

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

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

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

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