# Problem mit getNodeValue() und setNodeValue() in DOM



## Zauberlehrling (16. Aug 2005)

Hallo,

ich habe folgende XML-Struktur angelegt, die ich in Java mit DOM parse:


<question typ="single choice" wording="Was ist deine Lieblingsfarbe?">
<answer> schwarz </answer>
<answer> weiss </answer>
<answer> rot </answer>
<answer> blau </answer>
<answer> gelb </answer>
<answer> andere </answer>
</question>


Nun möchte ich mir mit getNodeValue() die Werte der Answer-Knoten holen und abspeichern, ich habe also folgendes gemacht:


```
...
   NodeList childList = nodeMain.getChildNodes();   //nodeMain ist der Question-Knoten
   int l = childList.getLength();
   for (int j=0; j<l; j++)
      {
      Node nodeChild = childList.item( j );
      String s = nodeChild.getNodeValue();
      //s weiterverarbeiten
      }
...
```

Das Problem, was jetzt auftritt ist, dass getNodeValue() in der letzten Zeile nicht richtig zu funktionieren scheint. 
Es liefert keinen Wert zurück, ganz so, als ob in den <answer>-Knoten nichts stehen würde. 
Darüberhinaus funktioniert setNodeValue() genausowenig, ich kann also z.B. keine neuen Werte in die <answer>-Knoten hineinschreiben.
Ich habe schon alles rauf- und runter debuggt, der Fehler tritt immer erst in Zeile 8 auf. Weiß jemand, was ich falsch gemacht hab????


----------



## Bleiglanz (16. Aug 2005)

in DOM ist "der Text" ein KIND des answer-knotens...


----------



## KSG9|sebastian (16. Aug 2005)

jo..allgemein find ich JDOM besser zu handhaben...


----------



## byte (16. Aug 2005)

jup, seh ich genauso. hier ein kleiner exkurs:

http://www.servlets.com/speaking/jdom-javaone.pdf


----------



## Zauberlehrling (16. Aug 2005)

Seltsam, <answer> scheint bei mir auch über keinen Kindknoten zu verfügen. Hab' verucht mit 

NodeList  nlist = nodeChild.getChildNodes() ;

den/die Kindknoten von "nodeChild" zu holen, aber er liefert sich selbst, also "nodeChild", wieder zurück (Kann man im Debug-Modus bei eclipse sehen). Darüberhinaus hat die Liste eine Länge von 0, also eigentlich gar keine Knoten! Das wird dadurch bestätigt, das bei Verwendung von getFirstChild() oder getLastChild() exceptions auftreten. 
Was ist denn diesmal schief gelaufen?


P.S.:
An JDom hatte ich auch schon gedacht. Aber es macht keinen Sinn mein ganzes Projekt nochmal neu zu schreiben. Ist einfach zu viel.


----------



## Bleiglanz (17. Aug 2005)

<question typ="single choice" wording="Was ist deine Lieblingsfarbe?">
<answer> schwarz </answer> 


beim allerersten knoten kriegst du den Whitespace zwischen

Lieblingsfarbe?">]HIER EIN ZEILENUMBRUCH[

und der nächsten Zeile

<answer> schwarz </answer> 

also wahrscheinlich ein Zeilenumbruch

=> du darst das nur machen, wenn nodeChild wirklich eine Elementknoten ist UND als namen "answer" hat

verwende mal lieber eine DTD, sonst erstickst du in den Whitespaces....


----------



## Zauberlehrling (18. Aug 2005)

Bleiglanz hat gesagt.:
			
		

> => du darst das nur machen, wenn nodeChild wirklich eine Elementknoten ist UND als namen "answer" hat



ok, verstehe ich. aber heisst das jetzt, dass ich ohne dtd garnicht auf den answer-knoten zurückgreifen kann?
oder gibt es auch eine möglichkeit, diese whitespaces einfach zu umgehen bzw. zu löschen oder zu "übergehen"? 
das problem ist, dass ich an einer anderen stelle mit DOM in einen html-baum eingreife und dort mit setnodevalue() arbeiten will/muss. dort tritt das gleiche problem mit dem whitespace auf. und dieser html-code wird vorher von einem xslt-parser erzeugt. da gibts keine dtd für.
(und danke für deine hilfe erstmal)


----------

