6

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

4

5 回答 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)。

于 2008-09-15T12:46:12.467 回答
4

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

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

  1. 不要这样做
  2. (仅限专家)暂时不要这样做。
于 2008-09-15T16:53:25.960 回答
0

您在这里有几个选择,但没有一个是好的。

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

于 2008-09-15T12:47:41.307 回答
0

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

于 2008-09-15T12:53:39.547 回答
-4

使用 XQuery 处理大型 XML 文件 适用于千兆字节大小的 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 平台的环境中运行。

于 2008-09-22T13:19:40.147 回答