XML-Datein in JTable laden (funktioniert teilweise)

Hans-Schmdt-Peter

Grünschnabel
Hi,


und zar geht es darum, dass ich wie im titel schonbeschrieben eine XML-Datei in ein JTable lade.

Mit dieser XML-Datei funktioniert es auch:

- <Firmenname>
<Vorname>Kraus</Vorname>
<Nachname>Mai</Nachname>
<Telefon>7678</Telefon>
<Raum>7.25</Raum>
<Kostenstelle>4895</Kostenstelle>
<Gehalt_pro_Stunde>28.40</Gehalt_pro_Stunde>
<Personalnummer>657</Personalnummer>
</Firmenname>



Das Problem ist, dass meine erstellte XML-Datei so aussieht und auch aussehen muss, da ich sie später auch in einen JTree laden will und dann mit dem Parent-Elementen Mai_Kraus und Löllen_Pöllen anzuzeigen und über Dopllelklick im JTree auf das Parent-Element und TextFelder veränderbar oder löschbar zu machen(auch wenn ich noch nicht wiess wie ich das realisieren kann) :

- <Firmenname>
- <Mai_Kraus>
<Vorname>Kraus</Vorname>
<Nachname>Mai</Nachname>
<Telefon>7678</Telefon>
<Raum>7.25</Raum>
<Kostenstelle>4895</Kostenstelle>
<Gehalt_pro_Stunde>28.40</Gehalt_pro_Stunde>
<Personalnummer>657</Personalnummer>
</Mai_Kraus>
- <Löllen_Pöllen>
<Vorname>Pöllen</Vorname>
<Nachname>Löllen</Nachname>
<Telefon>353</Telefon>
<Raum>1.25</Raum>
<Kostenstelle>568878</Kostenstelle>
<Gehalt_pro_Stunde>20</Gehalt_pro_Stunde>
<Personalnummer>568</Personalnummer>
</Löllen_Pöllen>
</Firmenname>


Mein Code zum füllen der JTable:

PHP:
public void einlesen() {

		org.jdom.Document doc = null;
		try {
			SAXBuilder b = new SAXBuilder(); // validierenden Parser nutzen
			doc = b.build(new File("file.xml")); // xml-Datei parsen
		} catch (JDOMException j) {

		} catch (IOException ioe) {

		}

		Element root = (Element) doc.getRootElement();

		mainWindow.getTVorName().setText(root.getChild("Vorname").getText());
		mainWindow.getTNachName().setText(root.getChild("Nachname").getText());
		mainWindow.getTTel().setText(root.getChild("Telefon").getText());
		mainWindow.getTRaum().setText(root.getChild("Raum").getText());
		mainWindow.getTKostenstelle().setText(
				root.getChild("Kostenstelle").getText());
		mainWindow.getTGehaltProStunde().setText(
				root.getChild("Gehalt_pro_Stunde").getText());
		mainWindow.getTPersonalnummer().setText(
				root.getChild("Personalnummer").getText());

	}


Ich hoffe jemand hat eine Idee wie ich dies Lösen kann.
Dankeschön schonmal für eure Hilfe.

MFG

Hans
 
Ok wie ich die Werte aus der zweiten XML-Datei rauslese habe ich herrausgefunden.


Aber er gibt immer nur das erste Parent-Element aus nicht due nachvolgenden.
Weiss da jemand eine Lösung?
Muss ich da mit Iterator arbeiten?

Hab es jetzt so gelöst(if-Anweisung funktioniert nicht):

PHP:
public static String[][] einlesen() {

		org.jdom.Document doc = null;
		try {
			SAXBuilder b = new SAXBuilder(); // validierenden Parser nutzen
			doc = b.build(new File("test.xml")); // xml-Datei parsen
		} catch (JDOMException j) {

		} catch (IOException ioe) {

		}

		Element root = (Element) doc.getRootElement();
		Element t = (Element) root.getChild(null);

		if (t.getChild(null) != null) {
			System.out.println(1);
			String[][] data = { { t.getChild("Vorname").getText(),
					t.getChild("Nachname").getText(),
					t.getChild("Raum").getText(),
					t.getChild("Telefon").getText(),
					t.getChild("Kostenstelle").getText(),
					t.getChild("Gehalt_pro_Stunde").getText(),
					t.getChild("Personalnummer").getText() },

			};
			return data;
		}
		return null;

	}
 
So ich hoffe ich kann dir hier ein bisschen helfen :)

mfg
opinion

PHP:
private ArrayList liste; // im Konsturkter eine ,,, liste = new ArrayList(); erzeugen

public void einlesen() {

	org.jdom.Document doc = null;
	try {
	      SAXBuilder b = new SAXBuilder(true); // 
                      validierenden Parser nutzen -- naja wenn du denn nutzen
                      willst musste den true sezten sonst bauste kein validierten auf
	      
                      doc = b.build(new File("test.xml")); // xml-Datei parsen
	       
                      Element root = doc.getRootElement();
                      
                     // ein kleiner Iterator würd ich halt nehmen :) aber ist Geschmacksache
                     List<Element> liste = root.getChildren("arbeiter"); // gibt dir alle Kinder mit 
                     namen Arbeiter würd ich so machen, und nicht Mai_Kraus fürs einlesen 
                    komplizierter, ausser es muss wirklich so aussehen.
                    Iterator<Element> it = liste.iterator();
                    while (it.hasNext()){
                            
                             Element person = it.next();
                             // ich würd jetzt hier eine neue methode schreiben z.b.
                            anzeigen(person);
                    }

                    } catch (JDOMException e) {
                      e.printStackTrace();
	    } catch (IOException e) {
                      e.printStackTrace();
                    }

}

private void anzeigen(Element person){

         String name = person.getChild("name").getText();
         // usw. mit den anderen halt auch
         
         // neue Klasse namens Person mit allen angeben über die Person musste halt 
         noch schreiben ist ne aufgabe von 5min :)
         Person PersonenInfos = new Person(name, vorname .......)
        // und nu die Person ab ins Array 
        liste.add(personenInfos);
}

// jo und was du dann noch alles mit der Array machst weisste ja sicher, komplettes Array zurück geben (zugreifen via Index) dann auf deine tabels oder was weiss ich überall hin verteilen :P von meiner Sicht her die schönere Lösung aber da streiten sich ja immer die Geister
 
Zuletzt bearbeitet:
Zurück