在更新单个元素时,是否有更好的替代方法来更新文件,而不是重写xml文件的全部内容?
答案 0 :(得分:6)
我建议使用VTD-XML http://vtd-xml.sourceforge.net/
从他们的常见问题解答(http://vtd-xml.sourceforge.net/faq.html):
为什么我应该将VTD-XML用于大型XML文件?
由于以下总结的众多原因:
- 性能:VTD-XML的性能远远优于SAX
- 易于使用:随机访问与XPath结合使应用程序易于编写
- 更好的可维护性:应用程序代码更短,更易于理解。
- 增量更新:偶尔的小变化会变得非常有效。
- 索引:预先解析的XML形式将进一步提升处理性能。
- 其他功能:只能使用VTD-XML剪切,粘贴,拆分和组合XML文档。
为了利用VTD-XML,我们建议开发人员将超大型XML文档拆分为更小,更易于管理的卡盘(<2GB)。
答案 1 :(得分:4)
如果您的XML文件太大以至于更新它是性能瓶颈,那么您应该考虑从XML转移到更高效的磁盘格式(或真正的数据库)。
但是,如果你感觉感觉可能是个问题,请记住优化规则:
答案 2 :(得分:0)
你有几个选择,但没有一个是好的。
由于XML对象没有分成不同的部分,你要么必须使用正则表达式模式匹配的一些文件系统级修改(sed是一个好的开始),或者你应该将xml分成更小的部分以便于管理。 / p>
答案 3 :(得分:0)
如果可能,请序列化XML并使用diff / patch / apply Linux工具(或平台中的等效工具)。这样,您就不必处理解析,编写。
答案 4 :(得分:-4)
使用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平台的任何环境中运行。