JDOMを使用して書き換えXML / DOMツリー(ConcurrentModificationExceptionが)の問題

StackOverflow https://stackoverflow.com/questions/588883

  •  09-09-2019
  •  | 
  •  

質問

私は、JDOMツリーを歩くと私が一緒に行くように変更を加える必要があります。この時点で、変更はほとんどが今、新たな要素を追加しているだけでなく、並べ替えの要素や削除の要素を含めることができます。すべての作業は何の並行性の問題が存在しないので、同じスレッドで実行されます。

これは、あなたが横断中にノードを追加しようとJDOMのイテレータはConcurrentModificationExceptionを投げることができるので、困難であることが判明しました。私が見ることができるものから、JDOMは、直接DOMノードを結ぶのではなく、リストを使用しており、これは、それが困難な場で修正を行うことになります。

私はこれに対処する方法についての提言のカップルを見てきた、など遅らせるようトラバーサルが完了、またはトラバース木が変わらないように、その場で新しいツリーを構築されるまで追加されます。私はそれを修正するように私は、ツリーの一貫したビューを必要とするので、これらは私のために動作しません。

私は、JDOMはちょうどここに動作しないことを疑い始めています。他のJava DOMモデルのいずれかが、これが容易になりますか?またはJDOMでこれを行う方法はありますか?

役に立ちましたか?

解決

私は、JDOMを使用して簡単な解決策のように見えるものを作ってみました。むしろ直接JDOMイテレータを使用するよりも、私は、ノードのリストを作成し、このリストを使用してトラバースするイテレータを使用しています。このリストは「ライブ」ではありませんので、私のスクリプトは、ツリーを変更することができます(と変更を参照)トラバーサルに影響を与えず。トラバーサルは、構造変化は見られませんが、それは問題になることはありません。

他のヒント

あなたは、単に二つのパスを行うことができない理由はありますか?

ツリーを飾るとき、

私は精通してるほとんどのアルゴリズムは(理想的には、あなたのアルゴリズムは、最初の装飾や装飾後の参照を解決するため、おそらく第二の合格が必要なはずです)2つの以上のトラバースを必要としません。

あなたが他のモデルの使用に開いているので、

、あなたはこの記事ではElliotte Rusty Harold著の XOM のAPIを検討するかもしれません。それは堅実だし、無効なXML構造を作成することはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top