使用Flyweight设计解析XML DOM

3

在Java中使用DOM处理XML文档对于包含大量重复节点、属性或值的文档来说,可能会过度消耗内存。

有没有人知道一种Java XML DOM API,它在内部利用了轻量级模式,以将内存占用降到最低?甚至可以进行配置/启用/禁用吗?


我怀疑是否有任何类似DOM的实现采用享元模式,因为更改树中的值(这是DOM的关键)非常难以实现。 - Uwe Plonus
只要用户明白,由于节点相同,更改一个节点将更改它们所有的节点,共享资源就是轻量级模式的关键。DOM假定一切都是唯一的,但并非总是如此。 - Chris Johnson
3个回答

1
你是真的想使用轻量级模式吗?还是考虑过像懒加载(或者“懒解析”)这样的东西?使用轻量级模式需要解析器识别具有相同内容(和结构)的元素。这将是一个耗时的操作(我担心,它也会占用空间)。此外,在哪个深度上应该开始识别轻量级模式?
事实上,我无法想象有任何DOM解析器能够识别轻量级模式。也不会有DOM解析器使用懒加载。这就是DOM的本质:解析整个XML文件并为高度灵活和随机导航生成数据结构。
也许你确实可以通过使用SAXStAX切换到流处理过程。当然,你将失去灵活和随机导航的能力,因为现在你必须“即兴”处理你的元素。
然而,有一个名为VTD-XML的解析器。它是为了内存效率而开发的。它还将整个XML文件加载到内存中,并提供了一些用于浏览元素的方法。但要注意:这种导航有点复杂,不太直观(由于内存效率存储的本质)。但也许这是你可以使用的东西。

0

我不知道是否有这样的DOM解析器(并不意味着它不存在)。然而,也许StAX解析器会接近你所寻找的。


-1

这不是问题的答案。DOM具有一些SAX没有的属性(例如导航)。 - Uwe Plonus

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