# XML einlesen



## XRayT1Raycer (20. Aug 2012)

Hallo community,

ivh bin gerade dabei mit Java ein XML-File einzulesen. Klappt sowit auch wunderbar mit

```
NodeList nl = doc.getElementsByTagName()
```

Allerdings verzweifel ich gerade an einer Stelle:
[XML]
<kontakte> 
    -<kontakt typ="kaTelefon"> 
       <text>01236-55569874574</text> 
    </kontakt> 
    -<kontakt typ="kaTelefon">
         <text>03265-5695485456854</text> 
    </kontakt> 
    -<kontakt typ="kaFax"> 
        <text>000000-225548554</text> 
    </kontakt> 
    -<kontakt typ="kaBank"> 
        <text>654646465465464646464</text> 
    </kontakt> 
</kontakte>[/XML]

Ich brauche nur die Telefonnummer, mit 
	
	
	
	





```
NodeList nl = doc.getElementsByTagName("text")
```
komm ich hier logischerweise nicht weiter...

Ich wäre für Tips dankbar...


----------



## Landei (20. Aug 2012)

Es gibt mehrere Wege, XML in Java einzulesen: SAX, DOM, StAX und JAXB, wovon JAXB bei bekanntem XML-Format normalerweise das bequemste ist. Vielleicht solltest du das mal probieren, anstatt dich mit Nodes herumzuärgern: JAXB hello world example


----------



## XRayT1Raycer (20. Aug 2012)

Das Einlesen der XML an sich ist nicht das Problem, das bekomme ich mit FOM ohne Probleme hin.
Nodes funktionieren für alle anderen Werte die ich aus der XML lesen möchte auch ohne Probleme...

Mir fällt nur irgendwie absolut nicht ein wie ich an die Telefonnummer kommen kann da es "text" halt mehrfach gibt...Vermutlich sehe ich den Wald vor lauter Bäumen nicht....


----------



## Landei (20. Aug 2012)

Ich weiß jetzt die Befehle nicht aus dem Hut, aber ich würde mir erst die Liste aller Kontakt-Nodes geben lassen, dann den "richtigen" herausfiltern, und nur von dem den Unterknoten geben lassen.


----------



## XRayT1Raycer (20. Aug 2012)

Wenn ich mir die "kontakt"-Nodes hole und anschließend die Liste ausgeben will kommt es zum immer gerne genommen NullPointer....

Habs auch schon getAttibutes() versucht, aber dann bekomme ich als Wert "kaTelefon" aber halt nicht die eigentliche Nummer....


----------



## XRayT1Raycer (20. Aug 2012)

Habs jetzt erstmal so gelöst


```
NodeList knotenListe = doc.getElementsByTagName("kontakt");
            NodeList tel = doc.getElementsByTagName("text");
            
           
           int anzahl = knotenListe.getLength();            
           String[] telNummern=new String[nl.getLength()];

           for (int i=0; i<anzahl; i++) {
                Element knoten = (Element) knotenListe.item(i);
                String ausgabe = knoten.getAttribute("typ");
            if(ausgabe.startsWith("kaTelefon")){
                telNummern[i]=tel.item(i).getFirstChild().getNodeValue();
            }
       
        }
```

funktioniert zwar nur solange jeder datensatz nur eine telefonnummer hat, aber ist schonmal ein anfang...


----------



## Templarthelast (21. Aug 2012)

Warum machst du keine Struktur mit: -Kontakte{ -Kontakt{ -Telefon -Bank} -Kontakt{...}} Dann kannst du diese Sachen Kontaktweise auslesen.


----------

