# XML in JTable Einlesen



## Shakal (27. Jan 2013)

Hey Leute ,

Könnte mir Jemand ein Codebeispiel dafür geben wie ich dieses 
[XML]<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<music>
	<MP3>
		<track>4</track>
		<title>Unbekannter Soldat</title>
		<artist>Annett</artist>
		<length>5.0</length>
		<album>Weil es so ist</album>
	</MP3>
</music>[/XML]
in eine JTable einlesen kann. Ich habe ein JTableModel und übergebe dieses Model die XML datei nachdem ich sie erstellt habe. 
Nun komme ich nicht weiter 
das ist das Model zur Tabele

```
import java.util.Vector;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;

public class ModelTable implements TableModel {
	private Vector mp3file = new Vector();
	private Vector listeners = new Vector();

	public void addTableModelListener(TableModelListener listener) {
		listeners.add(listener);
	}

	public void removeTableModelListener(TableModelListener listener) {
		listeners.remove(listener);
	}

	public void addTrack(String string) {
		try {
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document doc = db.parse(string);//String = XML file

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	// Eine Angabe, welchen Typ von Objekten in den Columns angezeigt werden
	// soll
	public Class getColumnClass(int columnIndex) {
		switch (columnIndex) {
		case 0:
			return Integer.class;
		case 1:
			return String.class;
		case 2:
			return String.class;
		case 3:
			return Float.class;
		case 4:
			return String.class;
		default:
			return null;
		}
	}

	public int getColumnCount() {
		return 5;
	}

	public String getColumnName(int column) {
		switch (column) {
		case 0:
			return "Track";
		case 1:
			return "Titel";
		case 2:
			return "Künstler";
		case 3:
			return "Zeit";
		case 4:
			return "Album";
		default:
			return null;
		}
	}

	public int getRowCount() {
		return 0;
	}

	public Object getValueAt(int rowIndex, int columnIndex) {
		return 0;
	}

	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return true;
	}

	public void setValueAt(Object arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub

	}

}
```


----------



## SlaterB (28. Jan 2013)

mit JTable hat das erst nachrangig zu tun, das verwirrt im Thementitel und nur 3 von 89 Code-Zeilen sind im Moment wirklich relevant:

```
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(string);
```
schreibe diese in eine main-Methode, mit fester Pfadangabe, deine ganze GUI ist unnötig

du musst jetzt die Daten extrahieren, gibt es keinerlei Beispiele dazu zu finden?
schau dir an was doc für Childen hat, wie diese Nodes heißen, für jeden music-Node ein Music-Objekt oder Array oder irgendwas erstellen und die weiteren Unterdaten einfügen,
am Ende musst du alle Music-Einträge in einer Liste haben und mit System.out.println() ausgeben

ERST dann kann man an eine zweite Aufgabe wie JTable denken,
dabei allerdings schon als Tipp: erbe von AbstractTableModel/ DefaultTableModel,
schon die Listener zu speichern ist unnötige Arbeit, vor allem aber fehlt dir das Ereignissystem zur Informatierung der JTable,

wann immer sich Daten ändern, rufe fireTableDataChanged() auf


----------



## Shakal (28. Jan 2013)

das habe ich doch schon ich speicher die Information von der XML schon in eine Liste und ich über gebe diese XML bloß
und was meinst mit Ereignissystem zur Informatierung JTable ?
Ich hab das Alles schon fertig .... Nur muss ich nur noch Wissen wie ich die Informationen aus der XML in die JTable kriege


----------



## SlaterB (28. Jan 2013)

ich sehe nicht mehr Code als die 3 Zeilen die ich zitiert habe,
wenn du von dort alles in Listen usw. schreiben würdest wäre der Rest wohl klar(er),

freilich kann auch getValueAt() direkt aus dem Document die Daten laden,
da stellt sich dann genauso die Frage, wo genau dein Problem ist?

Document erbt von Nodes, getChildList() liefert Anzahl, passenden raussuchen, 
dann passend zur Spalte weitere richtige Unterinformation,

solange du keine konkrete Frage stellst ist das so normal wie 2+2 zu rechnen

-------

zur JTable kannst du auch erstmal so bleiben wie es ist, wenn sich Probleme einstellen dann weitersehen,
ansonsten Tutorials zu JTable, in denen Begriffe wie DefaultTableModel fallen, keine großen Geheimnisse


----------

