Probleme mit XML / DOM-Baum mit JDOM (ConcurrentModificationException) Umschreiben

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

  •  09-09-2019
  •  | 
  •  

Frage

Ich brauche einen JDOM Baum zu gehen und Änderungen vornehmen, wie ich entlang gehen; An diesem Punkt hinzufügen Änderungen meist gerade jetzt neue Elemente, sondern könnten auch Elemente oder Entfernen von Elementen umfassen Nachbestellung. Alle Arbeiten werden auf dem gleichen Thread getan, so dass keine Parallelitätsprobleme sind.

Dies erweist sich als schwierig, da JDOM Iteratoren ein ConcurrentModificationException werfen können, wenn Sie versuchen, einen Knoten während Traversal hinzuzufügen. Von dem, was ich sehen kann, nutzt JDOM Listen statt direkter Verknüpfung DOM-Knoten und das macht es schwierig, Änderungen im laufenden Betrieb zu tun.

Ich habe ein paar Empfehlungen, wie gesehen, dies zu beschäftigen, wie Aufschieben der hinzufügt, bis die Traversal erfolgt, oder einen neuen Baum im Fluge bauen, so dass der Baum durchlief unverändert bleibt. Diese werden nicht für mich arbeiten, weil ich eine konsistente Sicht des Baumes muß, wie ich es ändern.

Ich fange an zu vermuten, dass JDOM wird gerade hier nicht funktionieren. Führen Sie eine der anderen Java DOM Modelle macht dies einfacher? Oder gibt es eine Möglichkeit, dies in JDOM zu tun?

War es hilfreich?

Lösung

Ich habe kommen mit, was aussieht wie eine einfache Lösung mit JDOM. Anstatt direkt die JDOM Iterator verwende ich den Iterator eine Liste von Knoten zu erstellen und dann durchlaufen diese Liste. Da diese Liste nicht „live“ ist, kann mein Skripte modifiziert den Baum (und die Änderungen sehen), ohne die Traversal zu beeinflussen. Die Traversal nicht strukturelle Veränderungen sehen, aber das sollte kein Problem sein.

Andere Tipps

Gibt es einen Grund, warum Sie können nicht einfach zwei Pässe tun?

Die meisten Algorithmen ich vertraut bin mit nicht mehr als 2 Querungen erfordern, wenn ein Baum Dekoration (im Idealfall, Ihr Algorithmus einen Pass für die anfängliche Dekoration benötigen sollte und vielleicht eine zweite für Referenzen nach der Dekoration Lösung).

Da Sie mit anderen Modellen offen sind, können Sie Elliotte Rusty Harold XOM API betrachten. Es ist absolut solide, und wird nicht zulassen, dass Sie eine ungültige XML-Struktur erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top