我需要走一个JDOM树和我一起去做出改变;在这一点上,变化大多添加新元素,但现在还可能包括重新排序的元素或删除元素。所以有没有并发问题所有的工作都在同一个线程来完成。

这被证明是困难的,因为如果你试图穿越过程中添加一个节点JDOM迭代器抛出ConcurrentModificationException。从我所看到的,JDOM使用列表,而不是直接连接DOM节点,这使得它很难做到对飞修改。

我已经看到了如何处理这个几个建议,比如推迟加后才遍历完成,或在飞行中建立一个新的树,这样的树遍历保持不变。因为我需要树一个一致的看法,因为我修改这些不会为我工作。

我开始怀疑,JDOM是不会在这里工作。是否有任何其他的Java DOM模型的简化这个过程?或者是有没有办法在JDOM做到这一点?

有帮助吗?

解决方案

我已经出来的看上去像是用JDOM一个简单的解决方案。而不是直接使用JDOM迭代器,我使用了迭代器来创建节点列表,然后使用这个列表遍历。由于这份名单是不是“活”的,我的脚本可以修改树(和看到的变化),而不会影响遍历。遍历不会看到的结构性变化,但不应该是一个问题。

其他提示

有一个原因,你不能简单地做两遍?

大多数算法我所熟悉的装饰树(理想情况下,你的算法应该需要初始装饰,也许对装修后解析引用第二通)。

当不需要超过2个遍历

既然你是开放给使用其他机型,可以考虑作者Elliotte Rusty Harold的 XOM API。这是坚如磐石,而不会允许你创建一个无效的XML结构。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top