Hi,
ich schlage mich gerade mit dem Problem herum, in einem eingelesenen XML-Dokument mittels JDOM, bei bestimmten Elementen neue Elemente einzufügen.
Der Baum wird mittels einer Iteration durchlaufen und ich laufe immer auf eine Exception (ConcurrentModificationException), wenn ich in den Baum ein neues Element einfüge. Warum das Problem entsteht, ist mir klar, da ich die Liste durch das Einfügen verändere auf dem die Iteration basiert. Ich bekomme es nur nicht anders hin.
Hier mein Kurzbeispiel:
Filter filter = new ElementFilter("wert");
Iterator it = doc.getDescendants(filter);
while (it.hasNext()){
Content content = (Content) it.next();
Element element = new Element("test");
// das neue Element "test" wird unterhalb des Parents erzeugt, da es auf gleicher
// "Ebene", wie das gesuchte Element "wert" platziert werden soll.
Element elementParent = content.getParentElement();
elementParent.addContent(content);
}
Nach dem ersten Durchlauf und dem erfolgreichen Einfügen des neuen Elements wird die
ConcurrentModificationException geschmissen. In meinem ursprünglichen Code habe ich eine Schleife außen herum gelegt und die Exception abgefangen, sodass es funktioniert, aber ist das die richtige Lösung?
Gibt es da nicht was Besseres, da das ganze recht aufwändig ist und mir auch fehleranfällig erscheint?
Tschau
ich schlage mich gerade mit dem Problem herum, in einem eingelesenen XML-Dokument mittels JDOM, bei bestimmten Elementen neue Elemente einzufügen.
Der Baum wird mittels einer Iteration durchlaufen und ich laufe immer auf eine Exception (ConcurrentModificationException), wenn ich in den Baum ein neues Element einfüge. Warum das Problem entsteht, ist mir klar, da ich die Liste durch das Einfügen verändere auf dem die Iteration basiert. Ich bekomme es nur nicht anders hin.
Hier mein Kurzbeispiel:
Filter filter = new ElementFilter("wert");
Iterator it = doc.getDescendants(filter);
while (it.hasNext()){
Content content = (Content) it.next();
Element element = new Element("test");
// das neue Element "test" wird unterhalb des Parents erzeugt, da es auf gleicher
// "Ebene", wie das gesuchte Element "wert" platziert werden soll.
Element elementParent = content.getParentElement();
elementParent.addContent(content);
}
Nach dem ersten Durchlauf und dem erfolgreichen Einfügen des neuen Elements wird die
ConcurrentModificationException geschmissen. In meinem ursprünglichen Code habe ich eine Schleife außen herum gelegt und die Exception abgefangen, sodass es funktioniert, aber ist das die richtige Lösung?
Gibt es da nicht was Besseres, da das ganze recht aufwändig ist und mir auch fehleranfällig erscheint?
Tschau