通过DOM解析器编辑BIG XML

时间:2011-09-25 16:48:28

标签: java xml parsing memory

如果有一个非常大的XML和DOM解析器用于解析它。 现在需要从XML添加/删除元素,即编辑XML 如何编辑XML,因为内存限制不会加载整个XML? 有什么可以解决这个问题的策略?

5 个答案:

答案 0 :(得分:2)

您可以考虑使用SAX解析器,而不是将整个文档保留在内存中。它会更快,也会使用更少的内存。

答案 1 :(得分:2)

正如另外提到的其他两个答案一样,SAX解析器可以解决这个问题。您对DOM的另一种选择是StAX parser

  

传统上,XML API是:

     
      
  • 基于DOM - 整个文档作为树读入内存   调用应用程序随机访问的结构
  •   
  • 基于事件 - 应用程序注册以接收事件为   在源文档中遇到实体。
  •   
     

两者都有优势;前者(例如,DOM)允许随机   访问文档,后者(例如SAX)需要一个小内存   足迹并且通常要快得多。

     

这两种访问隐喻可以被认为是极端对立。一个   基于树的API允许无限制,随机访问和操纵,同时   基于事件的API是源文档中的“一次性”传递。

     

StAX被设计为这两个对立面之间的中位数。在StAX中   隐喻,程序化入口点是表示一个的游标   在文件中指出。应用程序向前移动光标 -   根据需要从解析器中“提取”信息。这是   不同于基于事件的API - 例如SAX - 它“推送”数据   应用程序 - 要求应用程序维护状态   事件之间必要的跟踪位置内的事件   文档。

答案 2 :(得分:1)

StAX是我处理大型文档的首选方法。如果DOM是一个要求,请检查支持懒惰构造DOM节点的Xerces之类的DOM实现:

答案 3 :(得分:0)

加载XML文档的内存约束假设可能仅适用于DOM。 VTD-XML将整个XML加载到内存中,并且有效地(XML文档大小的1.3倍)......在内存和性能方面......

http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf

其他XML框架存在的另一个显着优点是其增量更新功能......

http://www.devx.com/xml/Article/36379

答案 4 :(得分:-1)

正如stivlo所提到的,你可以使用SAX解析器来读取XML。

但是对于编写XML,您可以将其作为纯文本写入fileoutput流。我相信你会得到要求,提到应该在哪个标签之后或在哪个标签下插入新数据。