如何更新大型XML文件

6

当单个元素更新时,不必重新编写整个xml文件,有没有更好的更新文件的方法?


文件有多大?它能放入内存中吗? - Peter
5个回答

6
我建议使用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文档分成更小、更可管理的块(<2GB)。

4

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

但是,如果您只是感觉可能会有问题,请记住优化规则:

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

0

在这里你有几个选择,但都不是很好。

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


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

-4

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

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

例如,假设您的公司是一家金融机构,需要为每个客户生成股票持有报告。客户通过Simple Object Access Protocol(SOAP)消息请求报告,该消息以XML表示。在大多数企业中,股票持有数据存储在多个关系数据库中,例如Oracle、Microsoft SQL Server或DB2。XQuery可以查询SOAP消息和关系数据库,创建XML报告。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接