【问题标题】:Memory efficient way to modify XML in Java在 Java 中修改 XML 的内存有效方法
【发布时间】:2015-06-25 05:55:35
【问题描述】:

我需要修改 XML 文件中的单个信息。 XML 文件大约 100 行。对于修改整个 XML 文件中的单个元素,JAVA 中最节省内存的方法是什么?

  1. JAXB 更好?
  2. 简单的 SAX 解析器?

或任何其他方式.....请建议.....

【问题讨论】:

  • 我必须更改 XML 文件中的单节点信息。但是这些 XML 文件的数量在 for 循环中可能会很大,大约在 5000 到 10000 之间。

标签: java xml parsing xsd xml-parsing


【解决方案1】:

SAX 解析器提供了更多的解析控制,并且比 DOM 解析器更快。从更少的代码编写的意义上来说,JAXB 会很容易。 XStream 也是另一种选择,但它类似于作为高级 API 的 JAXB,因此它有一些开销任务,因此它会比 SAX 慢一些。 我不会建议直接进行字符串操作(应用 String.indexOf() 和 String.replace()),虽然这将是更新 XML 中唯一标签的最快方法,但它有风险,因为您的 XML 可能无效并且如果 xml 结构是不简单的话会有更新错误级别标签的风险:-)

因此,SAX 解析器对我来说是最好的选择。

【讨论】:

  • 编写 SAX 应用程序很困难,需要高水平的技能和大量的时间。尽管问题的答案是正确的,但我非常不愿意向任何人推荐 SAX,除非我确信他们确实需要它,并且他们有使用它的技能。我们从尝试使用 SAX 的人那里收到了很多问题,他们甚至不知道如何实现一个简单的 Stack。
  • 谢谢迈克尔 - 在这里看到您的回复真是一种荣幸。我一直是你的忠实粉丝。 !
【解决方案2】:

您的文件不大。用于保存 100 行 XML 文件的内存大约需要程序员 5 毫秒的时间。我会质疑您的要求:为什么您需要以“最节省内存的方式”进行操作?我会使用 XSLT 或 JDOM2,除非有明确的量化信息表明这不能满足外部强加的性能要求,这不能通过购买更多的内存来解决。

【讨论】:

  • 我同意。可能是我的个人文件的大小不是很大,但是当我在循环中更新每个 XMl 文件时,此类文件的数量很大或者可能很大。此类文件的数量也可以增长到 30000-60000。这就是为什么我关心性能。如果你对这个话题有更多的意见,我热切地等待你的宝贵建议。
  • 当然你应该关心性能。但不是记忆。每个文档一经处理,可能就会被垃圾回收。
  • 我可以使用 JAXB 来加载 XML 和更新 XML 吗?这会比普通的 SAX 解析器更高效吗?
  • JAXB 可以非常高效。根据我的经验,当 XML 文件的结构简单、规则且稳定时,它的效果最好。如果不同文档之间存在很多差异,或者结构会随着时间而改变,那么 JAXB 不是您的最佳选择。
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2011-02-02
  • 2023-03-03
  • 2018-11-28
相关资源
最近更新 更多