JDOM - Einfügen mehrerer Elemente mit Attributen

Guntpat1981

Mitglied
Guten Abend zusammen,

ich nutze die JDOM-Bibliothek, um ein XML-Dokument einzulesen. Außerdem möchte ich zur Laufzeit neue Elemente hinzufügen. Die XML-Datei hat folgende (vereinfachte) Struktur:

Code:
<?xml version="1.0" encoding="UTF-8" ?>
<service>
    <classes>
        <class>

        </class>
    </classes>
</service>
Nun möchte ich in einer For-Schleife 10 neue Elemente unter dem Element "<class>" namens "<method>" hinzufügen. Dafür nutze ich folgenden Code:

Code:
            Element root = doc.getRootElement();
            
            Element newEle = root.getChild("classes").getChild("class");
            System.out.println(newEle.getName());
            ArrayList<Element> eleAL = new ArrayList<Element>();
            
            for(int i=0; i < 10; i++) {
                eleAL.add(newEle.addContent(new Element("match")));
                if(i < 4)
                    eleAL.get(i).getChild("match").setAttribute("access", "public");
                else
                    eleAL.get(i).getChild("match").setAttribute("access", "private");
            }

Die if-Bedingung ist nur zu Testzwecken so geschrieben. Bei dieser Implementierungsart werden zwar 10 Elemente angelegt, aber immer nur das erste Element erhält die Attributwerte - dabei möchte ich für jedes <method>-Element einen anderen Attributwert schreiben. Hat jemand eine Idee, wie ich das am Besten realisiere?

Vielen Dank und noch einen schönen Abend.

Grüße,
Guntpat1981
 
HI Guntpat1981,

hast du schon eine Lösung gefunden? Wenn nein, das hier funktioniert bei mir:
Code:
 Element newEle = root.getChild("classes").getChild("class");
            System.out.println(newEle.getName());
            ArrayList<Element> eleAL = new ArrayList<Element>();
            Element elm;
            for(int i=0; i < 10; i++) {
                elm = new Element("match");
                newEle.addContent(elm);
                eleAL.add(elm);
                if(i < 4)
                    eleAL.get(i).setAttribute("access", ""+i);
                else
                    eleAL.get(i).setAttribute("access", ""+i);
            }

Die XML-Datei sieht dann wie folgt aus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<service>
  <classes>
    <class>
      <match access="0" />
      <match access="1" />
      <match access="2" />
      <match access="3" />
      <match access="4" />
      <match access="5" />
      <match access="6" />
      <match access="7" />
      <match access="8" />
      <match access="9" />
    </class>
  </classes>
</service>

LG

Sebastian
PS.: Ich hoffe du hattest schon vorher eine Lösung gefunden ;)
 
Zurück