如何更新大型XML文件
除了在更新单个元素时重写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平台的任何环境中运行查询。