# Mit JDOM, XML-Daten in einer JTable einfügen



## ambipur (13. November 2003)

Hallo Zusammen, folgendes Problem stellt sich mir: 

Aus einer XML-Datei möchte ich zu bestimmten Elementinhalten,
die in dem Element <name> stehen, den darunter liegende Elementinhalt <value> in ein Object - Array (private Object [][] data) abspeichern.

Diese Textwerte möchte ich in genau der Reihenfolge auch in einer Zeile der JTable darstellen. 


MAT_Version_1, ..2,..3,..4 usw.
MAT_Revision_1, ..2,..3,..4 usw.
MAT_Herkunft_1, ..2,..3,..4 usw.
MAT_KlassenArt_1, ..2,..3,..4 usw.
MAT_KlassenID_1, ..2,..3,..4 usw.
MAT_KlassenBenennung_1, ..2,..3,..4 usw.
MAT_Detailbenennung_1, ..2,..3,..4 usw.


```
<Auftrag>
	<basisdaten>
		<auftragsname></auftragsname>
		<kbevers></kbevers>
		<wfvers></wfvers>
		<bearbvon></bearbvon>
		<bearbam></bearbam>
	</basisdaten>
	<parameter>
		<name>MAT_Nr_1</name>
		<value>020 160 001 767</value>
		<unit></unit>
		<type></type>
		<description></description>
	</parameter>

                     ... und 750 weitere Parameter in dem unter <name> mein Suchkriterium steht und direkt darunter der benötigte Wert im Element <value>
</Auftrag>
```

Hier ein Beispiel-Array mit Dummy-Daten:

```
private Object[][] data ={  
	{new Boolean(true),"020 160 001 767", "1002", "1", "0", "intern", "ZME", "000519", "Dichtungsbalg", "" }, 
	{new Boolean(true),"020 160 001 768", "1002", "1", "0", "intern", "ZME", "000400", "Spannring", "zapfenseitig" },
	{new Boolean(true),"020 160 001 769", "1002", "1", "0", "intern", "ZME", "000400", "Spannring", "gehäuseseitig" }, 
	};
```

Ich weiss, dass es möglich ist, den Inhalt der XML-Datei in ein Java-List-Object zu speichern um ihn dann mit einem Iterator und for-Schleifen zu bearbeiten, aber wie?.  Gebe hier den Inhalt der Elemente auf "System.out.println" aus.

```
if (o instanceof Element) {
      Element element = (Element) o;
      System.out.println("Element: " + element.getText());
      List children = element.getContent();
      Iterator iterator = children.iterator();
      while (iterator.hasNext()) {
        Object child = iterator.next();
        listNodes(child, depth+1);
      }
```

Komme einfach mit den for-Schleifen und if-Bedingungen nicht klar. 

Habe schon überlegt das ganze mit XSLT und XPath zu lösen 
evtl. sogar die XML-Struktur zu überarbeiten 
z.B.  das <name> -Element als Attribut im <parameter>-Element unter zu bringen
um dann vom Element das Attribut abzufragen und falls gleich, alle Child-Elemente in das Array zu legen.
Aber wie lege ich die Daten (MAT_xxx)  mit einer Schleife so in das Array ab, das sie eine Zeile bilden?  

Hat jemand von Euch vielleicht einen TIP für mich.
Bin für jeden Hinweis dankbar.


----------



## Thomas Darimont (13. November 2003)

Servus!

Wenn du mir ein kleines Bespiel XML File aufbereitest (mit Pseudo Echtdaten) mit
4-5 Datensätzen und mir dann genau zeigst wie die Ausgabe aussehen soll,
kann ich dir da morgen Abend eventuell helfen ...

Benötigst du die daten nur zum anzeigen oder auch zum Manipulieren ...?
Für den ersteren Fall liese sich das ganze IMHO leicht mit einem Ereignisbasiertem SAX Parser ausführen (javax.xml.SAXParsers ... dann hättest du auch nicht den "Overhead" den ein DOM Parser erzeugt wenn er den ObjektBaum aufbaut ...
willst du die Daten jedoch auch Manipulieren dann muss man doch zu letzterem greifen ...

Gruß Tom

Ps.:

Sag mal kann es sein, das sich bei JDOM.org nicht mehr allzuviel tut?
Der letzte Build ist vom 28.04.2003 ...?

Welche JDOM verwendest du denn zur Zeit JDOM9-Beta ?


----------



## ambipur (14. November 2003)

Hallo Thomas,
danke für Deine schnelle Antwort.

Ich benötige die Daten nur zum Anzeigen.
Ich möchte aus der XML-Datei eine JTable füllen die in jeder Zeile eine Material-Nr. und die dazugehörigen Daten enthält.

Anschließend kann der User über eine Checkbox in der Tabelle die jeweiligen Material-Nr auswählen um nur die jeweiligen Daten für die ausgewählten MAT_NRx aus der XML-Datei zu filtern.


```
private String[] columnNames = {"SML","Material-Nr","Urheber-Code","Version","Revision","Herkunft","Klassen-Art","Klassen-Id","Klassen-Bennenung","Klassen-Detailbenennung" };

	private Object[][] data ={  
	{new Boolean(true),"020 160 001 767", "1002", "1", "0", "intern", "ZME", "000519", "Dichtungsbalg", "" }, {
	 new Boolean(true),"020 160 001 768", "1002", "1", "0", "intern", "ZME", "000400", "Spannring", "zapfenseitig" }, {
	 new Boolean(true),"020 160 001 769", "1002", "1", "0", "intern", "ZME", "000400", "Spannring", "gehäuseseitig" }, 
	};
```
Mit dem SAX-Parser und ereignis-orientiert habe ich es auch schon mal versucht, bin aber wie gesagt, an den for-Schleifen gescheitert... 

Verwende übrigens JDOM Beta 9.
Ob sich in diesem Bereich schon lange nichts mehr getan hat, kann ich nicht beurteilen, da ich mich mit dieser "Materie" noch nicht all zu lange beschäftige.
Wie es aber aussieht, hat sich hier schon lange nichts mehr getan.
Bin leider erst wieder spät online...cu

Gruss Holger


----------



## ambipur (14. November 2003)

Hallo Thomas,
danke für Deine schnelle Antwort.

Ich benötige die Daten nur zum Anzeigen.
Ich möchte aus der XML-Datei eine JTable füllen die in jeder Zeile eine Material-Nr. und die dazugehörigen Daten enthält.

Anschließend kann der User über eine Checkbox in der Tabelle die jeweiligen Material-Nr auswählen um nur die jeweiligen Daten für die ausgewählten MAT_NRx aus der XML-Datei zu filtern.


```
private String[] columnNames = {"SML","Material-Nr","Urheber-Code","Version","Revision","Herkunft","Klassen-Art","Klassen-Id","Klassen-Bennenung","Klassen-Detailbenennung" };

	private Object[][] data ={  
	{new Boolean(true),"020 160 001 767", "1002", "1", "0", "intern", "ZME", "000519", "Dichtungsbalg", "" }, {
	 new Boolean(true),"020 160 001 768", "1002", "1", "0", "intern", "ZME", "000400", "Spannring", "zapfenseitig" }, {
	 new Boolean(true),"020 160 001 769", "1002", "1", "0", "intern", "ZME", "000400", "Spannring", "gehäuseseitig" }, 
	};
```
Mit dem SAX-Parser und ereignis-orientiert habe ich es auch schon mal versucht, bin aber wie gesagt, an den for-Schleifen gescheitert... 

Verwende übrigens JDOM Beta 9.
Ob sich in diesem Bereich schon lange nichts mehr getan hat, kann ich nicht beurteilen, da ich mich mit dieser "Materie" noch nicht all zu lange beschäftige.
Wie es aber aussieht, hat sich hier schon lange nichts mehr getan.
Bin leider erst wieder spät online...cu

Gruss Holger


----------

