[JAVA] XML-Datei für instanziierung

06/13/2013 21:37 Warnuk3r#1
Hallo, ich habe mal angefangen mit XML-Dateien zu arbeiten. Mein Ziel ist es eine XML-Datei für die Initialisierung von Objekten zu benutzen. Nun komme ich aber grade nicht darauf, wie ich mehr als einen Mitarbeiter (oder etwas anderes) "ansprechen" könnte...

XML-Datei
Code:
<Zuordnungen>
<Mitarbeiter mnummer="m1" vorname="Klaus" />
<Mitarbeiter mnummer="m2" vorname="herbert" />
<Projekt pnummer="p1" name="Haus" />
<Zuordnung mitarbeiter="m1" projekt="p1" umfang="200" />
</Zuordnungen>
Java-Code
Code:
private static void readXMLFile() {
Element orderElement = verwaltung.orderDocument.getDocumentElement();
NodeList orderitems = orderElement.getElementsByTagName("Mitarbeiter");
	for (int i = 0; i < orderitems.getLength(); i++) {
		Element orderitem = (Element) orderitems.item(i);
		String vorname = orderitem.getAttribute("vorname");
		System.out.println("Vorname: " + vorname);
	}
}
Der erste Mitarbeiter wird gefunden, doch wie springe ich zu den anderen? Dachte mir das so wie mit orderitems.item(i), aber finde da keine gescheite Lösung für orderElement.. ich denke wahrscheinlich auch in die falsche Richtung.

Wäre nett, wenn mir jemand ein paar Lösungsansätze an den Kopf werfen könnte :) Solange probiere ich mal weiter herum.

Mfg Wr3
06/13/2013 21:45 Obilee#2
Bevor du mit verschiedenen Libs oder Techniken anfängt mit XML rumzuspielen tue dir den Gefallen und nutz einfach "JAXB" dafür.

[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Damit kannst du ganz einfach Java-Objekte bzw. Listen von Objekten in XML unwandeln und die XML wieder in Java-Objekte.
06/13/2013 22:17 Warnuk3r#3
Mein Studium lässt solche gefallen leider nicht zu :(

Bin grade auf die Idee gekommen, alle Elemente runter zulaufen und sie aufgrund von Attributen zu unterscheiden, aber das scheint mir eine blöde Lösung zu sein.

EDIT: Habe gerade herausgefunden, dass man einfach eine Liste erstellt mit allen Elementen "Mitarbeiter".
EDIT2: Die NodeLIST ist ja auch eine Liste.. so müsste das eig. auch gehen ich Pfosten :o
EDIT3: So wie es aussieht hatte ich die Lösung schon von Anfang an, jedoch steht in der Liste immer nur der erste Mitarbeiter, hm.
06/14/2013 07:11 Obilee#4
Also gehts immer noch nicht ja ?

Ansich gehst du schon richtig an die Sache, entweder per Hand die einzelnen raussuchen:

Code:
NodeList age = element.getElementsByTagName("bla");
Element line = (Element) age.item(0);
oder halt durch iterieren:

Code:
NodeList bla= element.getElementsByTagName("bla");
     for(int j=0;j<bla.getLength();j++)
     {
        Element line = (Element) bla.item(j);       
     }
Probier mal auf den 2ten Mitarbeiter durch den Index zuzugreifen.
06/14/2013 13:26 Warnuk3r#5
Ja ich habe mir gestern den Kopf zerbrechen lassen bis ich gemerkt habe, dass dies ja schon genau das ist was ich wollte. Jedoch kam ich nicht drauf, da es nur den 0. also den ersten Mitarbeiter gibt. Wenn ich versuche den 1. (also den zweiten) Mitarbeiter rauszusuchen, kommt eine NullPointerException, es gibt diesen also nicht.
06/14/2013 13:53 Netzgeist#6
[Only registered and activated users can see links. Click Here To Register...]
Code:
void 	loadFromXML(InputStream in)
Code:
void 	storeToXML(OutputStream os, String comment)