# XML Dokument auslesen funktioniert nicht richtig



## LaLuna1987 (19. Sep 2009)

Hy @ all 
Habe da wieder mal ein „XML-auslese-Problem“: Habe ein ganz einfaches XML Dokument und da sollen nun die einzelnen Elemente und ihr Inhalt ausgegeben werden, aber manches zeigt er mir dreimal an und anderes gar nicht oder in falscher Kombination (siehe rote Markierung bei Ausgabe), woran liegt das? :rtfm:
Ich hoffe mir kann jemand weiterhelfen. Mit dem XML auslesen ist mir bisher immer ziemlich schwer gefallen, weiß nicht warum ;(
Ich weiß dieses Thema kommt oft vor und ich bin auch schon seit heute Morgen am probieren, aber es will irgendwie nicht klappen. Mit diesem Code liest er wenigstens alles aus, bei meinen anderen versuchen kam „null“ oder gar nicht raus…
Danke im Vorraus :toll:
PS: Sorry mit den Einrückungen beim Java Code, irgendwie bekomme ich das hier auch nicht hin... heute ist kein guter Tag für die Wissenschaft...

Hier ein Teil meines Java-Codes:


```
public void parse(InputStream in) throws IOException {
     Reader reader = new InputStreamReader(in);    
     KXmlParser parser = new KXmlParser();
   
     try {
          parser.setInput(reader);
          while (parser.next() != XmlPullParser.END_DOCUMENT) {
               if (parser.getEventType() == XmlPullParser.START_TAG) {
	        String name = parser.getName();
	        while (parser.next() != XmlPullParser.END_TAG) {
	    	if (parser.getEventType() == XmlPullParser.TEXT) {
	    	     String content = parser.getText();
	    	     System.out.println("Element: " + name);
  		     System.out.println("Inhalt: " + content);
	    	 }
	         }
	  }
           }
       } catch (Exception ex) {
	 ex.printStackTrace();
       }	  
}
```

Hier das einfache XML Dokument:

[XML]
<?xml version="1.0" encoding="utf-8" ?> 
   <SGDatenbank>
        <Sehenswuerdigkeit>
             <Nummer>001</Nummer> 
             <Name>Kasseler Rathaus</Name> 
             <GPS_Breitengrad>1</GPS_Breitengrad> 
             <GPS_Laengengrad>2</GPS_Laengengrad> 
             <Bilddateiname>rathaus.jpg</Bilddateiname> 
             <Text>Das Kasseler Rathaus ist groß und schön...</Text> 
        </Sehenswuerdigkeit>
        <Sehenswuerdigkeit>
             <Nummer>002</Nummer> 
             <Name>Herkules</Name> 
             <GPS_Breitengrad>3</GPS_Breitengrad> 
             <GPS_Laengengrad>4</GPS_Laengengrad> 
             <Bilddateiname>herkules.jpg</Bilddateiname> 
             <Text>Der Herkules...</Text> 
        </Sehenswuerdigkeit>
   </SGDatenbank>
[/XML]

So sieht die Ausgabe aus:

Element: SGDatenbank
Inhalt: 

Element: SGDatenbank
Inhalt: 

Element: SGDatenbank
Inhalt: 001

Element: Name
Inhalt: Kasseler Rathaus

Element: GPS_Breitengrad
Inhalt: 1

Element: GPS_Laengengrad
Inhalt: 2

Element: Bilddateiname
Inhalt: rathaus.jpg

Element: Text
Inhalt: Das Kasseler Rathaus ist groß....	

Element: Sehenswuerdigkeit
Inhalt: 

Element: Sehenswuerdigkeit
Inhalt: 002

Element: Name
Inhalt: Herkules

Element: GPS_Breitengrad
Inhalt: 3

Element: GPS_Laengengrad
Inhalt: 4

Element: Bilddateiname
Inhalt: herkules.jpg

Element: Text
Inhalt: Der Herkules...


----------



## SlaterB (19. Sep 2009)

du speicherst einmal parser.getName() in name und gehts davon aus, dass danach höchstens noch Text kommt bis zu einem End-Tag, so ist das aber nicht,
deswegen hast du am Anfang 3x SGDatenbank,
das ist der erste Tag und bis zum ersten End-Tag, nämlich </Nummer>, ignorierst du für allen weiteren Tags deren getName()

verwende überhaupt nur eine Schleife und gibt erstmal von jedem Element alles aus, immer Name, Type, Text usw.


----------



## LaLuna1987 (19. Sep 2009)

Hy Slater.
Danke für deine Antwort, hat mir geholfen, habe das Problem verstanden. Habe nun einen Weg gefunden wie ich die Elemente und ihren Inhalt (falls sie welchen haben) anzeigen lasssen kann (siehe unten).
Danke 


```
try {
	    	parser.setInput(reader);
	    	while (parser.next() != XmlPullParser.END_DOCUMENT) {
	    		if (parser.getEventType() == XmlPullParser.START_TAG) {
	    			String name = parser.getName();
	    			parser.next();
	    			if (!parser.isWhitespace()) {
		    			System.out.print(name + ": ");
	    				String text = parser.getText();
	    				System.out.println(text);
	    			}
	    		}
	    	}
	    } catch (Exception ex) {
	    	ex.printStackTrace();
	    }
```

Ausgabe: 

Nummer: 001
Name: Kasseler Rathaus
GPS_Breitengrad: 1
GPS_Laengengrad: 2
Bilddateiname: rathaus.jpg
Text: Das Kasseler Rathaus...

Nummer: 002
Name: Herkules
GPS_Breitengrad: 3
GPS_Laengengrad: 4
Bilddateiname: herkules.jpg
Text: Der Herkules...


----------

