Hallo liebes Forum,
kurz zu meinem Problem:
Ich erzeuge mit meinem Programm während der Runtime Objekte verschiedener Klassen. Diese Objekte werden in einer Arraylist abgelegt um sie zu bearbeiten bzw auf sie zuzugreifen.
Am Ende des Programms wird diese Arraylist in ein XML Dokument geschrieben.
Ich möchte dieses XML Dokument nun beim erneuten starten des Programms wieder einlesen um es weiterzubearbeiten/zu ändern. Doch irgendwie bekomm ich es nicht hin, dass aus dem XML Dokument wieder Objekte der richtigen Klasse erzeugt werden....
Fürs verständnis hier meine Main-Methode:
Und hier noch eine Beispiel XML, welche mit diesem Programm erzeugt wurde:
Kann mir jemand helfen? .. Ich hab es mit JAXB versucht jedoch komm ich da irgendwie nicht weiter... Falls ihr noch die anderen Klassen braucht poste ich diese gerne.
Herzlichen Dank schonmal im Vorraus!
Mit freundlichen Grüßen
kurz zu meinem Problem:
Ich erzeuge mit meinem Programm während der Runtime Objekte verschiedener Klassen. Diese Objekte werden in einer Arraylist abgelegt um sie zu bearbeiten bzw auf sie zuzugreifen.
Am Ende des Programms wird diese Arraylist in ein XML Dokument geschrieben.
Ich möchte dieses XML Dokument nun beim erneuten starten des Programms wieder einlesen um es weiterzubearbeiten/zu ändern. Doch irgendwie bekomm ich es nicht hin, dass aus dem XML Dokument wieder Objekte der richtigen Klasse erzeugt werden....
Fürs verständnis hier meine Main-Methode:
Code:
public static void main(String[] args) throws FileNotFoundException{
do{
System.out.println("Choose an option: 1. Creat new employee; 2. Search employee; 3. Delete employee; 4. Exit");
choice = scan.nextInt();
switch (choice){
case 1:
//Erstellen eines neuen Mitarbeiters
System.out.println("1. Koch; 2. Kellner; 3. Tellerwaescher; 4. Barkeeper");
choice2 = scan.nextInt();
switch (choice2){
case 1:
try {
System.out.println("Name eingeben:");
String name1 = scan.next();
System.out.println("Vorname eingeben:");
String vorname1 = scan.next();
System.out.println("Personal-Nummer eingeben:");
int persNr1 = scan.nextInt();
System.out.println("Gehalt eingeben:");
int gehalt1 = scan.nextInt();
System.out.println("Urlaubstage eingeben:");
int urlaub1 = scan.nextInt();
System.out.println("Einstellungsdatum eingeben: (xx.xx.xxxx)");
String datum1 = scan.next();
MitarbeiterList.add(new Koch(name1, vorname1, "Koch", persNr1, gehalt1, urlaub1, datum1));
System.out.println("Koch erstellt");
break;
}catch(InputMismatchException e){
System.out.println("Überprüfen sie, ob es sich bei den Eingaben Personal-Nummer, Gehalt und Urlaubstagen um Zahlen handelt");
System.out.println("Das Programm wurde beendet. Starten Sie es erneut!");
System.exit(0);}
case 2:
try {
System.out.println("Name eingeben:");
String name2 = scan.next();
System.out.println("Vorname eingeben:");
String vorname2 = scan.next();
System.out.println("Personal-Nummer eingeben:");
int persNr2 = scan.nextInt();
System.out.println("Gehalt eingeben:");
int gehalt2 = scan.nextInt();
System.out.println("Urlaubstage eingeben:");
int urlaub2 = scan.nextInt();
System.out.println("Einstellungsdatum eingeben: (xx.xx.xxxx)");
String datum2 = scan.next();
MitarbeiterList.add(new Kellner(name2, vorname2, "Kellner", persNr2, gehalt2, urlaub2, datum2));
System.out.println("Kellner erstellt");
break;
}catch(InputMismatchException e){
System.out.println("Überprüfen sie, ob es sich bei den Eingaben Personal-Nummer, Gehalt und Urlaubstagen um Zahlen handelt");
System.out.println("Das Programm wurde beendet. Starten Sie es erneut!");
System.exit(0);}
case 3:
try {
System.out.println("Name eingeben:");
String name3 = scan.next();
System.out.println("Vorname eingeben:");
String vorname3 = scan.next();
System.out.println("Personal-Nummer eingeben:");
int persNr3 = scan.nextInt();
System.out.println("Gehalt eingeben:");
int gehalt3 = scan.nextInt();
System.out.println("Urlaubstage eingeben:");
int urlaub3 = scan.nextInt();
System.out.println("Einstellungsdatum eingeben: (xx.xx.xxxx)");
String datum3 = scan.next();
MitarbeiterList.add(new Koch(name3, vorname3, "Tellerwaescher", persNr3, gehalt3, urlaub3, datum3));
System.out.println("Tellerwaescher erstellt");
break;
}catch(InputMismatchException e){
System.out.println("Überprüfen sie, ob es sich bei den Eingaben Personal-Nummer, Gehalt und Urlaubstagen um Zahlen handelt");
System.out.println("Das Programm wurde beendet. Starten Sie es erneut!");
System.exit(0);}
case 4:
try {
System.out.println("Name eingeben:");
String name4 = scan.next();
System.out.println("Vorname eingeben:");
String vorname4 = scan.next();
System.out.println("Personal-Nummer eingeben:");
int persNr4 = scan.nextInt();
System.out.println("Gehalt eingeben:");
int gehalt4 = scan.nextInt();
System.out.println("Urlaubstage eingeben:");
int urlaub4 = scan.nextInt();
System.out.println("Einstellungsdatum eingeben: (xx.xx.xxxx)");
String datum4 = scan.next();
MitarbeiterList.add(new Koch(name4, vorname4, "Barkeeper", persNr4, gehalt4, urlaub4, datum4));
System.out.println("Barkeeper erstellt");
break;
}catch(InputMismatchException e){
System.out.println("Überprüfen sie, ob es sich bei den Eingaben Personal-Nummer, Gehalt und Urlaubstagen um Zahlen handelt");
System.out.println("Das Programm wurde beendet. Starten Sie es erneut!");
System.exit(0);}
default:
System.out.println("Falsche Eingabe! Programm wird beendet.");
System.exit(0);}
System.out.println("Zurueck zum Menu? (ja/nein)");
choice3 = scan.next();
if (choice3.equals("nein")) {
System.out.println(MitarbeiterList.get(0).printMitarbeiterinfo());
scan.close();
try {
String filepath = "C:\\Users\\ckrahlisch\\Documents\\Java\\Mitarbeiter\\Mitarbeiter.xml";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element root = doc.createElement("Mitarbeiter");
doc.appendChild(root);
for (int i = 0; i < MitarbeiterList.size(); i++) {
if (MitarbeiterList.get(i).Taetigkeit.equals("Koch")){
MA = doc.createElement("Koch");
root.appendChild(MA);}
else if (MitarbeiterList.get(i).Taetigkeit.equals("Kellner")){
MA = doc.createElement("Kellner");
root.appendChild(MA);}
else if (MitarbeiterList.get(i).Taetigkeit.equals("Tellerwaescher")){
MA = doc.createElement("Tellerwaescher");
root.appendChild(MA);}
else {
MA = doc.createElement("Barkeeper");
root.appendChild(MA);}
Element Name = doc.createElement("Name");
Name.appendChild(doc.createTextNode(MitarbeiterList.get(i).Name));
MA.appendChild(Name);
Element Vorname = doc.createElement("Vorname");
Vorname.appendChild(doc.createTextNode(MitarbeiterList.get(i).Vorname));
MA.appendChild(Vorname);
Element Taetigkeit = doc.createElement("Taetigkeit");
Taetigkeit.appendChild(doc.createTextNode(MitarbeiterList.get(i).Taetigkeit));
MA.appendChild(Taetigkeit);
Element persAusweisNr = doc.createElement("persAusweisNr");
persAusweisNr.appendChild(doc.createTextNode(String.valueOf(MitarbeiterList.get(i).persAusweisNr)));
MA.appendChild(persAusweisNr);
Element gehalt = doc.createElement("Gehalt");
gehalt.appendChild(doc.createTextNode(String.valueOf(MitarbeiterList.get(i).gehalt)));
MA.appendChild(gehalt);
Element Urlaubstage = doc.createElement("Urlaubstage");
Urlaubstage.appendChild(doc.createTextNode(String.valueOf(MitarbeiterList.get(i).Urlaubstage)));
MA.appendChild(Urlaubstage);
Element EinstellungsDatum = doc.createElement("Einstellungsdatum");
EinstellungsDatum.appendChild(doc.createTextNode(MitarbeiterList.get(i).EinstellungsDatum));
MA.appendChild(EinstellungsDatum);
}
//Daten in ein XML-File schreiben
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
transformer.transform(source, result);
System.out.println("Done");
}catch(ParserConfigurationException pce){
pce.printStackTrace();
}catch(TransformerException tfe){
tfe.printStackTrace();
}
System.exit(0);}
else if (choice3.equals("ja")){
weiter = true;
break;}
else {
System.out.println("Ihre Eingabe war Fehlerhaft. Das Programm wird beendet.");
break;}
System.out.println("Erstellen der Mitarbeiter abgeschlossen.");
case 2:
//Suchen eines Mitarbeiters
System.out.println("Mitarbeiter wird gesucht");
break;
case 3:
//Löschen eines Mitarbeiters
System.out.println("Mitarbeiter wird gelöscht");
break;
case 4:
//Vorgang beenden
System.out.println("Vorgang wird beendet");
weiter = false;
break;
default:
System.out.println("Falsche Eingabe! Programm wird beendet.");
System.exit(0);}
}while (weiter);}}
Code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Mitarbeiter>
<Koch>
<Name>test</Name>
<Vorname>test</Vorname>
<Taetigkeit>Koch</Taetigkeit>
<persAusweisNr>123456</persAusweisNr>
<Gehalt>12345</Gehalt>
<Urlaubstage>123</Urlaubstage>
<Einstellungsdatum>1</Einstellungsdatum>
</Koch>
<Kellner>
<Name>1</Name>
<Vorname>1</Vorname>
<Taetigkeit>Kellner</Taetigkeit>
<persAusweisNr>1</persAusweisNr>
<Gehalt>1</Gehalt>
<Urlaubstage>1</Urlaubstage>
<Einstellungsdatum>1</Einstellungsdatum>
</Kellner>
<Tellerwaescher>
<Name>5</Name>
<Vorname>5</Vorname>
<Taetigkeit>Tellerwaescher</Taetigkeit>
<persAusweisNr>5</persAusweisNr>
<Gehalt>5</Gehalt>
<Urlaubstage>5</Urlaubstage>
<Einstellungsdatum>5</Einstellungsdatum>
</Tellerwaescher>
<Barkeeper>
<Name>7</Name>
<Vorname>7</Vorname>
<Taetigkeit>Barkeeper</Taetigkeit>
<persAusweisNr>7</persAusweisNr>
<Gehalt>7</Gehalt>
<Urlaubstage>7</Urlaubstage>
<Einstellungsdatum>7</Einstellungsdatum>
</Barkeeper>
</Mitarbeiter>
Herzlichen Dank schonmal im Vorraus!
Mit freundlichen Grüßen