1

JDOMツリーを歩きながら、変更を加える必要があります。この時点で、変更は主に現在新しい要素を追加していますが、要素の並べ替えや要素の削除も含まれる可能性があります。すべての作業は同じスレッドで行われるため、同時実行の問題はありません。

トラバーサル中にノードを追加しようとすると、JDOMイテレータがConcurrentModificationExceptionをスローする可能性があるため、これは困難であることがわかります。私が見る限り、JDOMはDOMノードを直接リンクする代わりにリストを使用しているため、その場で変更を行うことは困難です。

これに対処する方法について、トラバースが完了するまで追加を延期する、またはトラバースされたツリーが変更されないようにその場で新しいツリーを構築するなど、いくつかの推奨事項を見てきました。変更するときにツリーの一貫したビューが必要になるため、これらは機能しません。

ここではJDOMが機能しないのではないかと思い始めています。他のJavaDOMモデルのいずれかがこれを容易にしますか?または、JDOMでこれを行う方法はありますか?

4

3 に答える 3

3

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

于 2009-02-26T19:01:22.853 に答える
0

単純に2パスできない理由はありますか?

私が精通しているほとんどのアルゴリズムは、ツリーを装飾するときに2回以上の走査を必要としません(理想的には、アルゴリズムは最初の装飾のためのパスと、装飾後の参照を解決するための1秒が必要です)。

于 2009-02-26T02:48:09.290 に答える
0

他のモデルを使用することにオープンであるため、Elliotte Rusty Harold のXOM API を検討することもできます。これは堅実であり、無効な XML 構造を作成することはできません。

于 2009-02-26T04:49:24.803 に答える