# DOM Parsen Problem mit HTML Sonderzeichen



## spass-digga (4. Jul 2009)

Hallo,

hab gerade ein kleines Problem beim Parsen von XML das ich von einem Webservice zurückgeliefert bekomme.

Codeauszug:


```
db = dbf.newDocumentBuilder();
dom = db.parse(in);
Element docEle = dom.getDocumentElement();
NodeList nl = docEle.getElementsByTagName("event");
Element entry = (Element)nl.item(1);
Element title = (Element)entry.getElementsByTagName("title").item(0);
String strTitel = title.getFirstChild().getNodeValue();
System.out.println("Titel: " + strTitel);
```

Funktioniert auch wunderbar. Es tritt nur eine Problem auf, wenn das Element title in der XML mit einen HTML Sonderzeichen beginnt. Beispiel:

<title>&quot;Klampfen für Ruhm und Freibier&quot;</title>

Dann erhalte ich als Ausgabe:

Titel: "

Das erste &quot; wird also in ein " umgewandelt und der Rest des Strings wird gar nicht gespeichert. Kann ich irgendwie nicht nachvollziehen ich hätte eine der folgenden Ausgaben erwartet:

Entweder:

Titel: "Klampfen für Ruhm und Freibier"

oder halt

Titel: &quot;Klampfen für Ruhm und Freibier&quot;

Die erste Variante wäre schön, mit der zweiten könnte ich zumindest weiterarbeiten.  Aber da ich gar nicht erst an den vollständigen String rankomme kann ich damit nichts anfangen.

Hat jemand eine Idee wie man das umgehen kann? Vielen Dank schonmal.

Gruß
Rudi


----------



## Localtime (5. Jul 2009)

Hi spass-digga,

das sieht nicht danach aus, als ob der Fehler bei Dir liegt, sondern dass das HTML-Document nicht XML-Conform ist.

Tags nicht geschlossen (<br> statt <br />)
oder sowas:  <div><span></div></span>

Grüße aus dem sonnigen Essen

Localtime


----------



## spass-digga (5. Jul 2009)

Hi, danke für dein Interesse. Die XML Datei ist korrekt aufgebaut. Der title tag wird richtig geschlossen. Klappt halt nur nicht, wenn in dem Tag HTML Sonderzeichen enthalten sind.

Beispiel 1 funktioniert:

<title>The Dad Horse Experience</title>

Beispiel 2:

<title>&quot;Klampfen für Ruhm und Freibier&quot;</title>

Liefert die oben geschilderte Ausgabe, es wird also nicht der komplette Inhalt des title Tags zurückgeliefert sondern nur das erste &quot; in ein Anführungszeichen umgewandelt. Wahrscheinlich müsste der Inhalt von title als CDATA deklariert werden, damit der Parser dies eins zu eins ausließt. Leider kann ich den Aufbau der Datei nicht beeinflussen, da dies ja wie gesagt die Antwort eines Webservices ist.

Gruß
Rudi


----------



## Localtime (6. Jul 2009)

Hi,

versuche mal statt "getNodeValue()" mit "getTextContent()"

Gruß Localtime


----------



## spass-digga (6. Jul 2009)

Juhu, ich konnte es endlich lösen.  Also durch diese Sonderzeichen interpretiert des Parser den title Tag als Tag mit weiteren Unterknoten. 

<title>&quot;Klampfen für Ruhm und Freibier&quot;</title>  -> wird zu einem title Knoten mit 3 Kindknoten zerlegt

Ich hab mit meinem Konstrukt immer nur den ersten Kindknoten ausgelesen. Mit ner Schleife durchlauf ich jetzt alle Kindknoten und baue mir den String wieder zusammen. 


```
String strTitel = title.getFirstChild().getNodeValue();
		          Integer k = title.getChildNodes().getLength();
		          if(k > 1){
		        	  NodeList nlTitle = title.getChildNodes();
		        	  for (int l = 1; l < k; l++){
		        		  strTitel = strTitel + nlTitle.item(l).getNodeValue();	  
		        	  }
		          }
```

Danke!

Gruß
Rudi


----------

