# XML Werte einlesen aber wie am besten weiterverarbeiten?



## martin1989 (13. Mrz 2015)

Schönen Nachmittag!

Ich habe eine xml Datei mittels JDOM in java eingelesen, hat wunderbar funktioniert.
Nun habe ich folgende Datenstrukutur:


```
<node1> 
   <blabla>
   <blabla2>
   <blabla3>
   ...
</node1>
<node2> 
   <blabla>
   <blabla2>
   <blabla3>
   ...
</node2>
usw...
```

meine Frage wäre, wie gestallte ich das Datenhandling am besten in Java? Ich will die Werte/Attribute der "blabla" später für jede "node" in einer GUI mit SWING anzeigen lassen.

Meine Idee wär gewesen eine Klasse mit "blabla" als Attributen zu machen und dann für jede "node" eine neue Instanz anlegen. Dann hätte ich quasi für jede node ein objekt/instanz.

Ist das so der übliche weg oder geht man hier anders vor? zB mit Array Lists oder so?
In den "blabla" Tag steht meist eine Zahl aber auch Sätze. 


Vielen Dank und beste Grüße,
Martin

P.S.: hab hier schon im Forum geschaut und am nähesten am meiner Frage wäre dieser Thread gewesen: http://www.java-forum.org/xml-und-c...-einlesen-verarbeiten.html?highlight=jdom+xml


----------



## martin1989 (13. Mrz 2015)

EDIT:
Hab das hier gefunden, wo es so gemacht wird das für jede "node" ein objekt erzeugt wird:
JDOM Parser – Read XML file to Object in Java | JournalDev

Ist das so empfehlenswert für meinen Zweck das ich es später in einer GUI mit SWING ausgeben will?


----------



## martin1989 (13. Mrz 2015)

oder wäre es empfehlenswert dies gleich mit arrays (zb.: multidimensional) zu machen, da dies dann besser geeignet wäre wenn ich das ganze zB in einer JTable anzeigen lassen will?


----------



## Thallius (13. Mrz 2015)

Irgendwie kapier ich deine denke nicht. Natürlich brauchstcdu sowohl eine eigene Klasse mit Attributen die den Blabla entsprechen als auch mindestens ein Array von Objekten dieser Klasse für jede Node eine. Ohne Klasse geht es höchstens wenn du ganz merkwürdige Konstrukte mit irgendwelchen collections macht. Ohne Array geht es gar nicht.


----------



## martin1989 (17. Mrz 2015)

hy thalluis!

das ich ein array für alle objekte einer jeden node brauche war mir klar  ich meinte, ob ich die Inhalt der "Blabla" in attribute speichern sollte oder in listen. 

Ich habs jetzt mal auf beide wege gelöst. einmal hab ich für jede "node" ein objekt erstellt das die "blabla" werte den definierten attributen des objektes zuweist.

Dann hab ichs noch versuch in dem ich wieder für jede node ein objekt erstelle und aber nicht mehr attribute sondern nur mehr eine Map. Hab dann den blabla namen als key in die map geladen und den inhalt als value. Hat auch funktioniert. Diese vorgehensweise ist ein wenig flexibler da ich nicht die attribute schon vor definieren muss sondern direkt in die map schreiben kann, je nach dem wie sie heissen und wieviele es sind.

Ich werde jetzt dann schauen welche vorgehensweise besser geeignet ist um den inhalt von blabla in tabellen auf einer swing gui darstellen zu können  

Danke für deine antwort !


----------



## lhein (18. Mrz 2015)

Warum nicht einfach annotierte POJOs erstellen and dann dein XML mit JAXB einlesen / ausgeben? Das wandelt dein XML sofort in die entsprechenden Klassen um und du hast ein sauberes Model.


----------



## martin1989 (18. Mrz 2015)

Hallo lhein!

Was sind den annotierte Objekte?  

Der Grund warum ich DOM verwendet habe war, weil es für mich ganz einfach anzuwenden zu schien. 
Wäre JAXB auch eine einfach anzuwendende alternative?

Danke, lg


----------



## lhein (18. Mrz 2015)

Schau mal hier: JAXB - Tutorial

Einfacher als mit JAXB gehts fast nicht.


----------



## martin1989 (18. Mrz 2015)

danke!

so wie ich das sehe brauche ich dann aber das schema des xml files oder? 
das sieht bei mir aber bei jedem xml files anders aus, sprich es ist immer unterschiedlich tief geschachtelt und mit DOM habe ich es so gelöst das ich einfach so tief in den baum hineingegangen bin bis zum element das keine kinder mehr hatte und da will ich ja auch immer hin


----------



## lhein (18. Mrz 2015)

die Elemente des XML Files sollten bekannt sein, sonst kannst Du ja keine classes mit Annotations erstellen. Das ist aber eigentlich in den meisten Fällen so. Du könntest ja mal deine XML Dateien posten.


----------



## martin1989 (18. Mrz 2015)

das xml sieht eigentlich immer so aus:



```
<node1> 
   <node2>
       <bla>
       <bla>
  </node2>
  <node3>
    <node4>
      <node5> 
         <bla>
         <bla>
      </node5>
    </node4>
  </node3>
</node1>
```

also je nach file kann es unterschiedlich tief in den baum hineingehen bis zu der letzten node wo dann die bla attribute sind.


----------



## lhein (18. Mrz 2015)

Wenn Du nur an den <bla> Elementen interessiert bist, warum benutzt Du nicht einfach XPath um genau diese rauszufiltern? Schau mal hier: Java XPath Tutorial: How to Parse XML File using XPath in Java


----------



## martin1989 (18. Mrz 2015)

dies schaut auch ganz vielversprechend aus  

viel anders mach ich es ja auch nicht mit JDOM, da hangle ich mich halt mit .getChildren so tief hinein bis NULL zurückkommt und hole mir dann in dieser ebene mit getAttribute die werte  

ich werd mir das mit dem xpath auf jedenfall noch mal genau ansehen und schauen ob es event. so einfacher wäre  danke


----------



## lhein (18. Mrz 2015)

Ja, passt schon gut dann mit dem was du hast.


----------

