XML-Parser: geparste Strings in Konstruktor?

hfu

Mitglied
Moin Moin,

ich sitze gerade an folgendem Problem:
Ich habe von einem XML-File Mitarbeiter mit ihren Attributen eingelesen - und will diese nun einem Mitarbeiterobjekt zuordnen. Leider will das in der For-schleife nicht so ganz - bzw ich kann die Objekte ja nicht zur Laufzeit mit einem Index erzeugen.

Mitarbeiter:
Java:
import java.util.*;

public class Employee {

	private int empNr;
	private String empName;

	private final List<String> skills;

	public Employee() {
		
		skills = new ArrayList<String>();
	}

	public Employee(int empNr, String empName, String... skills) {

		this.empNr = empNr;
		this.empName = empName;
		this.skills =  Arrays.asList(skills);
	}

Die Getter/Setter lass ich an der Stelle mal weg.

Ausschnitt aus dem Parser:
Java:
 import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

public class Parser {
    static Document employeeDocument;
    static Document invoiceDocument;
    
	/*public static void main(String[] args) {
		createParserAndDocument();
		readXMLFile();
		//writeXMLFile();
	}*/

	public void readXMLFile() {

		Element employeeElement = Parser.employeeDocument.getDocumentElement();
		
		Employee e1 = new Employee();
		Employee e2 = new Employee();
		Employee e3 = new Employee();
		Employee e4 = new Employee();
		Employee e5 = new Employee();
		Employee e6 = new Employee();
		Employee e7 = new Employee();
		Employee e8 = new Employee();
		Employee e9 = new Employee();
		
		List<Employee> liste = new ArrayList<Employee>();
		liste.add(e1);
		liste.add(e2);
		liste.add(e3);
		liste.add(e4);
		liste.add(e5);
		liste.add(e6);
		liste.add(e7);
		liste.add(e8);
		liste.add(e9);

		NodeList employeeItems = employeeElement.getElementsByTagName("employeeItem");
		for (int i = 0; i < employeeItems.getLength(); i++) {
			
			Element employeeItem = (Element) employeeItems.item(i);
			
			String number = employeeItem.getAttribute("number");
			int nr = Integer.decode(number);
			
			String name = employeeItem.getAttribute("name");
			
			String skill1 = employeeItem.getAttribute("skillname1");
			String skill2 = employeeItem.getAttribute("skillname2");
			String skill3 = employeeItem.getAttribute("skillname3");
			
//			System.out.println(number);
//			System.out.println(name);
//			System.out.println(skill1+ "\n" + skill2+ "\n" + skill3);
			
			String bla = "e"+i;
			
			liste.get(i).setEmpName(name);
			liste.get(i).setEmpNr(nr);
			liste.get(i).addSkill(skill1);
			liste.get(i).addSkill(skill2);
			liste.get(i).addSkill(skill3);
			
			System.out.println(liste.get(i).getEmpName() + liste.get(i).getEmpNr() + liste.get(i).getSkills());
		}
	}



	/*private static void writeXMLFile() {
		Element invoiceElement = invoiceDocument.createElement("invoice");
		invoiceDocument.appendChild(invoiceElement);
		invoiceElement.setAttribute("customer", "xy");
		invoiceElement.setAttribute("day", "05");
		invoiceElement.setAttribute("month", "05");
		invoiceElement.setAttribute("year", "07");
		Element invoiceItem1 = invoiceDocument.createElement("InvoiceItem");
		invoiceElement.appendChild(invoiceItem1);
		invoiceItem1.setAttribute("Product", "a");
		invoiceItem1.setAttribute("Amount", "40");
		Element invoiceItem2 = invoiceDocument.createElement("InvoiceItem");
		invoiceElement.appendChild(invoiceItem2);
		invoiceItem2.setAttribute("Product", "b");
		invoiceItem2.setAttribute("Amount", "60");
	}*/

	public void createParserAndDocument() {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setValidating(true);
		try {
			DocumentBuilder builder = factory.newDocumentBuilder();
		    employeeDocument = builder.parse(new File("employeeDocument.xml"));
		    invoiceDocument = builder.newDocument();
		} catch (SAXParseException spe) {
			System.out.println("\n** Parsing error" + ", line " +
			spe.getLineNumber() + ", uri " + spe.getSystemId());
		    System.out.println("   " + spe.getMessage());
		    System.exit(1);
		} catch (SAXException sxe) {
			System.out.println(sxe.getMessage());
			System.exit(1);
		} catch (ParserConfigurationException pce) {
			System.out.println(pce.getMessage());
			System.exit(1);
		} catch (IOException ioe) {
            System.out.println(ioe.getMessage());
            System.exit(1);
        }
	}
}

Vor allem den Teil mit der Objekterzeugung und der Zuweisung der Werte finde ich mehr als nur unelegant. Vor allem wenn ich in meinem XML-Dokument dann weitere Mitarbeiter erstelle.
Gibt es eine Lösung um die Zuweisung eleganter zu gestalten? Bspweise mit dem Konstruktor?
 

Noctarius

Top Contributor
Vielleicht hilft dir hier der XmlParser weiter :p Dann brauchst du dich nicht um das komplette XML Zeugs drum herum zu kümmern. Ein ähnliches beispiel zu deinem Code findest du hier: Technobasefm - javaxmlparser - Technobase.fm tracklist example - Project Hosting on Google Code

Ansonsten ist mir nicht ganz klar wieso du so viele Employee-Instanzen vorinstanzierst. Mach doch einfach eine Liste und pro Employee-Tag machst du innerhalb der for-Schleife eine neue Instanz welche du am Ende in die Liste einfügst.

Nachtrag - Pseudocode:
Code:
List<Employee> list
for (Node : NodeList)
    Employee = new Employee()
    // Werte von Employee setzen
    list.add(Employee)
 

hfu

Mitglied
Ich muss diese neuen Instanzen ja auch bennenen, also

Java:
Employee e1 = new Employee();

so zum Beispiel.
Und das Problem in der for-schleife ist ja nun, dass ich e1 nur einmal haben kann.
Ich kann ja nich sowas wie employee e(i) oder sowas nehmen.
Das ist im Grunde das Problem, auf das ich hinauswill.
 

hfu

Mitglied
Huch, das macht ja gar nichts wenn in der Liste 10 Objekte drin sind die alle e1 heissen.
Dann hab ich mich wohl mal wieder ziemlich dämlich angestellt ;-)

Dachte die Bezeichnungen für Objekte in einer Liste müssten einmalig sein.

Dankeschön =)
 

Nicer

Bekanntes Mitglied
Schön zu sehn dass mein Beispiel schon verwendung findet , wenndu das problem nochnet gelöst hast kannich dir gerne erklären wie ich auf die funktion des Parsers gekommen bin :)

@Mods : Verschiebung in die XML Zone wäre angebracht :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkm Gibt es XML-Parser-Bibliotheken XML & JSON 3
B XML-Daten mit SAX Parser verarbeiten in Java XML & JSON 4
MiMa SAX-Parser beenden? XML & JSON 5
K GSON-Parser XML & JSON 6
K XML-Parser vs. XLST XML & JSON 4
L DOM Parser Implementieren XML & JSON 9
M SAX Parser implementieren XML & JSON 2
E Gibt es denn einen XML-Parser für JUnit-Tests? XML & JSON 6
D XSD Parser XML & JSON 1
T Neuer XML Parser!!! XML & JSON 33
J XML Parser anhand xsd erzeugen XML & JSON 2
H SAX Parser optimieren XML & JSON 5
H Sax Parser verschluckt teile XML & JSON 11
C XML SAX Parser XML & JSON 10
R Handler-Wechsel, SAX Parser bricht nach 8192 Byte ab XML & JSON 5
B SAX-Parser - Dokumente einlesen und in einer Map ablegen XML & JSON 2
S Sax Parser Performance XML & JSON 2
M Eigener XML-Parser XML & JSON 1
S Typsicherer HTML-Parser XML & JSON 5
S HTML Parser XML & JSON 2
B Parser und Fabrik XML & JSON 6
F SAX Parser siehe nichts auf dem Konsole weder eine Fehlermeldung noch eine Ergebnis XML & JSON 6
enne87 SAX-Parser XML & JSON 5
C Mit SAX Parser XML Attribute auswerten XML & JSON 3
S DOM Parser XML & JSON 12
S Sax Parser XML & JSON 3
D Speicherüberlauf bei character-Methode mit SAX-Parser XML & JSON 3
Y Welchen XML Parser / Klassen aus XSD generieren lassen XML & JSON 4
H Brauche ich einen speziellen XML-Parser? XML & JSON 2
M Unhierarchisches XML-File mit DOM-Parser auswerten XML & JSON 5
G XML Parser Fehler, zwei gleiche kind-Elemente XML & JSON 7
S Welcher XML-Parser am besten? XML & JSON 4
S Parser XML & JSON 2
S JAVA XML Parser der einen String parst XML & JSON 3
Noar XML-Parser mit GUI? XML & JSON 2
R Problem mit SAX-Parser characters() XML & JSON 7
K SAX Parser Character Puffer zu klein XML & JSON 2
B Mit Sax-Parser validieren XML & JSON 7
Wildcard xpath Parser XML & JSON 8
R XML zur Aufbewahrung von Strings XML & JSON 5
S XML Strings in JAVA einlesen, aber wie? XML & JSON 8
D character entity references ins strings auflösen XML & JSON 2
R Daten aus xml lesen und in Strings speichern XML & JSON 4

Ähnliche Java Themen

Neue Themen


Oben