XML Datei einlesen und Elemente ausgeben

Sophie

Bekanntes Mitglied
Hallo Zusammen

Ich habe hier ein Programm, dass nicht so ganz richtig funktioniert. Ich kann den Fehler aber leider nicht finden. Kann mir vielleicht jemand weiterhelfen?

Ich denke, es liegt an dieser Zeile:

Java:
Kontakt kontakt = new Kontakt(null, typ, typ, typ, typ, typ, typ);

Aber wenn ich sie umschreiben will, meckert Eclipse

Der Konstruktor sieht so aus:

Java:
public Kontakt(KontaktTyp pTyp, String pNachname, String pVorname,
            String pStrasse, String pPlz, String pOrt, String pLand) {

        this(null, pTyp, pNachname, pVorname, pStrasse, pPlz, pOrt, pLand);
    }

Ich bekomme dann folgende Ausgabe
Adressdaten für Max Mustermann gefunden!
Der Kontakt ist an null. Stelle
Der Kontakt ist null
Strasse: Musterstrasse
PLZ: privat
Ort: Musterstadt
Land: Musterland

Es sollte aber folgendermassen sein
Adressdaten für Max Mustermann gefunden!
Der Kontakt ist an 2,. Stelle
Der Kontakt ist privat
Strasse: Musterstrasse
PLZ: 12345
Ort: Musterstadt
Land: Musterland

Der komplette Quellcode dazu sieht so aus
Java:
public class MeinAdressbuch {
	
    public static enum KontaktTyp {
        privat, geschaeftlich
    }
    
    //die gespeicherte XML Datei
    private static String XMLDateiName;	
	private static ArrayList<Kontakt> kontakte = new ArrayList<Kontakt>();
	
	
	/**
	 * Konstruktor
	 * @param dataFileName
	 *                    Name der XML-Datei, die die AdressDaten enthält
	 * @throws ParserConfigurationException 
	 * @throws IOException 
	 * @throws SAXException 
	 */
	MeinAdressbuch(String dataFileName) throws ParserConfigurationException, SAXException, IOException {
		XMLDateiName = dataFileName;
		
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		//Übergebene XML-Datei parsen
		Document dokument = builder.parse(new File(XMLDateiName));
		//DOM Baum durchlaufen und ausgeben
		traversieren(dokument.getDocumentElement(), "");
		}
	
private static void traversieren(Element e, String ebene) {
        
        if (e.getNodeName().equals("Kontakt")) {
        	String typ = e.getAttribute("typ");
        	KontaktTyp kontaktTyp = KontaktTyp.privat;
        	if (typ.equals("geschaeftlich")) {
            	kontaktTyp = KontaktTyp.geschaeftlich;        		
        	}
        	Kontakt kontakt = new Kontakt(null, typ, typ, typ, typ, typ, typ);
           	kontakte.add(kontakt);
           	          	
        }

        // Kindelemente des uebergebenen Elements ermitteln
        NodeList children = e.getChildNodes();
        for (int i = 0; i < children.getLength(); i++) {
            Node knoten = children.item(i);
            // Knoten ist ein ELEMENT_NODE
            if (knoten.getNodeType() == Node.ELEMENT_NODE) {
            	traversieren((Element) knoten, ebene + " ");
            // Knoten ist ein TEXT_NODE
            } else if (knoten.getNodeType() == Node.TEXT_NODE) {
                String inhalt = knoten.getTextContent();
                if (kontakte.size() > 0) {
                    Kontakt kontakt = kontakte.get(kontakte.size()-1);
                	if (inhalt.trim().length() > 0) {                	
	                	if (e.getNodeName().equals("Vorname")) {
	                		kontakt.setVorname(inhalt);
	                	}
		            	if (e.getNodeName().equals("Nachname")) {
		            		kontakt.setNachname(inhalt);
		            	}
		            	if (e.getNodeName().equals("Strasse")) {
		            		kontakt.setStrasse(inhalt);
		            	}
		            	if (e.getNodeName().equals("Plz")) {
		            		kontakt.setPlz(inhalt);
		            	}
		            	if (e.getNodeName().equals("Ort")) {
		            		kontakt.setOrt(inhalt);
		            	}
		            	if (e.getNodeName().equals("Land")) {
		            		kontakt.setLand(inhalt);
		            	}
	                }
	            }
            } 
        }
    }
	public ArrayList<String> getAlleNamen() {
    	ArrayList<String> namen = new ArrayList<String>();
    	for (int i=0; i<kontakte.size(); i++) {
    		Kontakt kontakt = kontakte.get(i);
    		String vorname = kontakt.getVorname();
    		String nachname = kontakt.getNachname();
    		String nameKomplett = vorname + " " + nachname;
    		namen.add(nameKomplett);			
    	}    	    	
		return namen;
    }
	
	public ArrayList<Kontakt> getAdressenDaten(String vorname, String nachname) {
    	ArrayList<Kontakt> gefundeneKontakte = new ArrayList<Kontakt>();
    	for (int i=0; i<kontakte.size(); i++) {
        	Kontakt kontakt = kontakte.get(i);
        	if (kontakt.getVorname().equals(vorname) || kontakt.getNachname().equals(nachname)) {
        		gefundeneKontakte.add(kontakt);        		
        	}        	    		    		
    	}    	
    	return gefundeneKontakte;
	}
	
	
	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException{
	
		MeinAdressbuch meinAdressbuch = new MeinAdressbuch("adressen2.xml");
		System.out.println(meinAdressbuch.getAlleNamen());
		
		// Sucht nach Kontaktdaten für Max Mustermann
		ArrayList<Kontakt> kontakte = meinAdressbuch.getAdressenDaten("Max", "Mustermann");
		for(int i=0; i<kontakte.size(); i++) {
			Kontakt kontakt = kontakte.get(i); 
			System.out.println("Adressdaten für " + kontakt.getVorname() + " " + kontakt.getNachname() + " gefunden!");			
			System.out.println("Der Kontakt ist an " + kontakt.getId() + ". Stelle");
			System.out.println("Der Kontakt ist " + kontakt.getTyp());
			System.out.println("Strasse: " + kontakt.getStrasse());			
			System.out.println("PLZ: " + kontakt.getPlz());			
			System.out.println("Ort: " + kontakt.getOrt());			
			System.out.println("Land: " + kontakt.getLand());		
		}		
	}
}
 

diggaa1984

Top Contributor
sieht ein wenig komisch aus die traversieren-methode .. könntest du mal noch den code der Kontakt-Klasse sowie eine kleine Bsp-XML angeben .. damit man mal den Aufbau sieht
 

Sophie

Bekanntes Mitglied
Na klar

Java:
public class Kontakt {

    public static enum KontaktTyp {
        privat, geschaeftlich
    }

    private String id;
    private KontaktTyp typ;
    private String Nachname;
    private String vorname;
    private String strasse;
    private String plz;
    private String ort;
    private String land;

    public Kontakt(String pId, KontaktTyp pTyp, String pNachname,
            String pVorname, String pStrasse, String pPlz, String pOrt,
            String pLand) {
        setId(pId);
        setTyp(pTyp);
        setNachname(pNachname);
        setVorname(pVorname);
        setStrasse(pStrasse);
        setPlz(pPlz);
        setOrt(pOrt);
        setLand(pLand);
    }

    public Kontakt(KontaktTyp pTyp, String pNachname, String pVorname,
            String pStrasse, String pPlz, String pOrt, String pLand) {

        this(null, pTyp, pNachname, pVorname, pStrasse, pPlz, pOrt, pLand);
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public KontaktTyp getTyp() {
        return typ;
    }

    public void setTyp(KontaktTyp typ) {
        this.typ = typ;
    }

    public String getNachname() {
        return Nachname;
    }

    public void setNachname(String name) {
        this.Nachname = name;
    }

    public String getVorname() {
        return vorname;
    }

    public void setVorname(String vorname) {
        this.vorname = vorname;
    }

    public String getStrasse() {
        return strasse;
    }

    public void setStrasse(String strasse) {
        this.strasse = strasse;
    }

    public String getPlz() {
        return plz;
    }

    public void setPlz(String plz) {
        this.plz = plz;
    }

    public String getLand() {
        return land;
    }

    public void setLand(String land) {
        this.land = land;
    }

    public String getOrt() {
        return ort;
    }

    public void setOrt(String ort) {
        this.ort = ort;
    }
}

[XML]-<Adressbuch>
Kontakt typ="privat">
-<Name> <Vorname>Max</Vorname>
<Nachname>Mustermann</Nachname>
</Name>
-<Adresse>
<Strasse>Musterstrasse</Strasse>
<Postleitzahl>12345</Postleitzahl>
<Ort>Musterstadt</Ort>
<Land>Musterland</Land>
</Adresse>
</Kontakt>[/XML]
 

diggaa1984

Top Contributor
so habs hinbekommen ..

zum ersten wegen der ID: die setzt du bevor du das Element in die Liste addest .. das hattest du schlicht vergessen :)

wegen dem KontaktTyP: hier hast du 2 enums deklariert .. nimm das aus der Klasse Adressbuch heraus und beziehe dich nur auf das in der Klasse Kontakt .. dort ist es ja bereits public static

weiterhin hab ich den Konstruktor mit passenden Werten aufgerufen .. das macht dann erstmal:
Java:
if (e.getNodeName().equals("Kontakt")) {
            String typ = e.getAttribute("typ");
            Kontakt.KontaktTyp kontaktTyp = Kontakt.KontaktTyp.privat;
            if (typ.equals("geschaeftlich")) {
                kontaktTyp = Kontakt.KontaktTyp.geschaeftlich;              
            }
            Kontakt kontakt = new Kontakt(String.valueOf(kontakte.size()+1), kontaktTyp, "", "", "", "", "", "");
            kontakte.add(kontakt);
        }

bei der Postleitzahl, hast du nur den falschen Prüfstring angegeben, in der XML und im Source nutzt du 2 verschiedene Strings (PLZ und Postleitzahl)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
J Csv-Datei einlesen Java Basics - Anfänger-Themen 52
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
P Datei einlesen und zurückgeben Java Basics - Anfänger-Themen 5
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
E Einteilung der Räume mit einlesen einer .txt datei Java Basics - Anfänger-Themen 16
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
L Input/Output XML Datei einlesen (JAXB?) Java Basics - Anfänger-Themen 10
F Zahlen aus Datei einlesen und in Array speichern Java Basics - Anfänger-Themen 2
I Datei einlesen Java Basics - Anfänger-Themen 11
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
K Datei aus unbekannten Speicherorten einlesen Java Basics - Anfänger-Themen 1
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
N Datei Zeilenweise einlesen, Ausgabe mehrere Arrays Java Basics - Anfänger-Themen 7
E Erste Schritte txt.Datei mit BufferedReader einlesen und in 2D-Array abspeichern Java Basics - Anfänger-Themen 15
M Methoden Datei einlesen und als return übergeben. Java Basics - Anfänger-Themen 8
P CSV Datei einlesen und damit ein Datenmodell befüllen Java Basics - Anfänger-Themen 2
N Datei einlesen und grafisch anzeigen Java Basics - Anfänger-Themen 31
P csv Datei einlesen und ausgeben Java Basics - Anfänger-Themen 5
J Text Datei einlesen Java Basics - Anfänger-Themen 6
N gerichteter Graph aus einer Datei einlesen Java Basics - Anfänger-Themen 21
E Datei einlesen und bestimmte Wörter ausgeben Java Basics - Anfänger-Themen 2
Z Erste Schritte Versuche ein Labyrinth in einem Terminal zu erstellen, aber kann die properties Datei nicht einlesen Java Basics - Anfänger-Themen 3
J Encoding Problem beim Einlesen einer txt Datei mit Umlauten Java Basics - Anfänger-Themen 3
V Excel Datei einlesen und verarbeiten Java Basics - Anfänger-Themen 4
stylegangsta Input/Output Hat eclipse eine Macke oder mein Code Array Datei einlesen Java Basics - Anfänger-Themen 5
N Mehrdimensionales float Array aus .txt-Datei einlesen? Java Basics - Anfänger-Themen 17
C Datei mit Daten einlesen und höchsten wert der zweiten Spalte ermitteln Java Basics - Anfänger-Themen 1
J CSV Datei einlesen und verarbeiten Java Basics - Anfänger-Themen 10
I BufferedReader Text-Datei einlesen??? Java Basics - Anfänger-Themen 1
S Datei einlesen - Dateipfad unter Linux anpassen Java Basics - Anfänger-Themen 12
A Datei in Array einlesen Java Basics - Anfänger-Themen 6
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
Ananaskirsche Input/Output Bestimmte Zeile aus Datei einlesen Java Basics - Anfänger-Themen 4
J .txt Datei "einlesen "und in String speichern ergibt immer NULL Java Basics - Anfänger-Themen 17
M CSV-File aus datei system einlesen Java Basics - Anfänger-Themen 3
B Datei in Java einlesen Java Basics - Anfänger-Themen 13
S Datei einlesen und ausgeben Java Basics - Anfänger-Themen 8
S Input/Output einlesen aus einer evtl. leeren Datei Java Basics - Anfänger-Themen 5
J Input/Output Datei - Zeilenumbruch einlesen Java Basics - Anfänger-Themen 10
H config Datei erstellen + einlesen Java Basics - Anfänger-Themen 15
F Datei einlesen ( Bytes ) Java Basics - Anfänger-Themen 12
T Klassen CSV datei einlesen und parsen Java Basics - Anfänger-Themen 4
U Datei einlesen Java Basics - Anfänger-Themen 9
S ANSI-Datei einlesen UND UTF-8-Datei schreiben Java Basics - Anfänger-Themen 3
M Datei einlesen mit generics? Java Basics - Anfänger-Themen 9
I Datei einlesen, Inhalt in MAP ablegen Java Basics - Anfänger-Themen 10
A Erste Schritte Datei einlesen und Buchstaben zählen Java Basics - Anfänger-Themen 13
D txt-Datei zeilenweise als String einlesen Java Basics - Anfänger-Themen 2
E JPane txt datei einlesen Java Basics - Anfänger-Themen 5
D RegExp .txt-Datei einlesen Java Basics - Anfänger-Themen 6
M Datei Einlesen Fortan-Style? Java Basics - Anfänger-Themen 3
A Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 5
S Datei einlesen Java Basics - Anfänger-Themen 21
D Datei einlesen Fehler Java Basics - Anfänger-Themen 17
A Beim txt Datei einlesen kommen zusätzliche Lehrzeichen dazu. Java Basics - Anfänger-Themen 5
H eine Datei schnellstmöglich einlesen Java Basics - Anfänger-Themen 12
0 Log4J Probleme beim einlesen der Log datei Java Basics - Anfänger-Themen 2
E Input/Output Linux datei in Windows zeilenweise einlesen Java Basics - Anfänger-Themen 4
L Problem beim Einlesen einer Datei in einen String Java Basics - Anfänger-Themen 12
S Datenströne - Text in eine Datei einlesen, umwandeln und in eine neue Datei schreiben Java Basics - Anfänger-Themen 6
E externe .txt Datei mit Scanner einlesen Java Basics - Anfänger-Themen 7
N Input/Output .txt-Datei einlesen, aufteilen und seperat abspeichern Java Basics - Anfänger-Themen 3
L Datei einlesen Java Basics - Anfänger-Themen 12
L Input/Output Datei in Java einlesen Java Basics - Anfänger-Themen 9
J Datei einlesen Java Basics - Anfänger-Themen 10
I .csv-Datei einlesen klappt aber kann nicht in String geschrieben werden!?!?! Java Basics - Anfänger-Themen 11
S Datei einlesen und Ergebnis wieder in Datei schreiben Java Basics - Anfänger-Themen 5
J Datei einlesen teile aus lines ändern und wieder rausschreiben. Java Basics - Anfänger-Themen 4
B Wertetabelle mit versch. Formaten aus txt-Datei einlesen Java Basics - Anfänger-Themen 2
H 200000 Zeilen aus Datei einlesen Java Basics - Anfänger-Themen 13
D CSV Datei einlesen und verarbeiten Java Basics - Anfänger-Themen 23
J byteweise Einlesen einer Datei "Von.. bis.." Java Basics - Anfänger-Themen 3
J Einlesen/Speichern von Strings aus einer Datei Java Basics - Anfänger-Themen 15
Z CSV-Datei einlesen mit dem JFileChooser !!! Java Basics - Anfänger-Themen 5
H Einlesen einer CSV-Datei Java Basics - Anfänger-Themen 2
X einlesen aus Datei, Fehler Java Basics - Anfänger-Themen 9
S Einlesen einer Datei? Java Basics - Anfänger-Themen 9
L Datei einlesen und neu geändert ausgeben Java Basics - Anfänger-Themen 8
B Formel aus Datei einlesen und benutzen Java Basics - Anfänger-Themen 3
C Datei einlesen Java Basics - Anfänger-Themen 19
H Datei einlesen in einer MVC Anwendung Java Basics - Anfänger-Themen 3
M OutOfMemoryError beim Datei einlesen Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben