# jdom2 - Referenz auf Nested Element



## Nisbo (26. Apr 2018)

Servus,

ich weiß nicht wie ich es im Titel am besten beschreiben soll, aber Referenz auf Nested Element trifft es glaube ich ganz gut.

Ich habe ein XML  File welches eine Kanalliste enthält (und noch viele andere Sachen) und von dieser Kanalliste möchte ich einige Daten (so 10 von 60) bearbeiten.

Das Auslesen ist ja nicht das Problem, dabei lese ich die Daten in eine JList so das ich ich sie später in der GUI auswählen und bearbeiten kann.

Ändern eines Eintrages selbst ist auch kein Problem

```
channelEntry.getChild("CP_CNVPERSALIAS").setText("Neuer Wert");
```

Das Problem vor dem ich jetzt stehe ist das ich nicht weiß wie ich beim Speichern den richtigen Eintrag im XML Document "anspreche". 

Eine Möglichkeit wäre beim Speichern nochmal alle Kanäle durchzugehen und gucken welchen ich bearbeite, also prüfen ob element equals is (dazu habe ich das Element schon mal mit ins Object genommen) aber da sist irgendwie unschön

Eine weitere Möglichkeit wäre später beim Speichern der XML Datei den Bereich mit den Kanälen komplett neu zu erstellen, dazu müsste ich dann aber sämtlich Werte und Attribute neu erstellen, das möchte ich aber generell vermeiden und das nicht nur aus Faulheit 

Hier der Code wie ich den Bereich der mich interessiert einlesen, wie bekomme ich das jetzt am besten eine Referenz auf das jeweilige XML Element ?


```
File inputFile                            = new File("D:\\testfile.xml");
SAXBuilder saxBuilder                    = new SAXBuilder();
this.document                            = saxBuilder.build(inputFile);
Element rootElement                        = this.document.getRootElement();
Element element_APP_PARTITION            = rootElement                     .getChild("APP_PARTITION");
Element element_CNV_PER_CMP_TYPE_GRP    = element_APP_PARTITION           .getChild("CNV_PER_CMP_TYPE_GRP");
List<Element> channelList                = element_CNV_PER_CMP_TYPE_GRP    .getChildren("CNV_PER_CMP_TYPE");

for (int iii = 0; iii < channelList.size(); iii++) {
    Element channelEntry = channelList.get(iii);
   
    Channel channel = new Channel(
                                    channelEntry.getChild("CP_CNVPERSALIAS").getText(),
                                    channelEntry.getChild("CP_RXFREQ").getText(),
                                    channelEntry.getChild("CP_TXFREQ").getText()
                                );
   
    channel.setElement(channelEntry);     // ???????? Referenz ????????
   
    this.arrayListChannels.add(channel);
}
```


----------



## Flown (26. Apr 2018)

Eine Map<Channel, Element> könnte da helfen?!


----------



## Nisbo (26. Apr 2018)

Thx funktioniert


----------

