# XML - rekursives auslesen - Zeilenumbruch als NodeValue?



## Stroker89 (27. Nov 2012)

Hallo meine XML ist an einer Stelle immer verschieden.
Vom Unmarshal bekomm ich eine Liste mit DOM Elementen.

Jetzt möchte ich über einen rekursiven Aufruf alle Nodes haben, die einen Value aufweisen.
Das geht auch so weit ganz gut. Hier der Code:


```
private void findChildren(Node node){
	    NodeList nodeList = node.getChildNodes();
	    for (int i = 0; i < nodeList.getLength(); i++) {
	        Node currentNode = nodeList.item(i);
	        if (currentNode.getNodeType() == Node.ELEMENT_NODE){
	        	findChildren(currentNode);
	        }else {
	        	if(!currentNode.getNodeValue().trim().equals("\n")){
	        		out.add(currentNode.getNodeValue());
	        	}
	        }
	    }
	    print(out);
	}
```

Die Funktion tut auch was sie soll nur sind die Ausgaben total komisch.

Wenn ich die XML so schreibe: 


```
<?xml version="1.0" encoding="UTF-8"?>
<message>
   <header>
      <status>OK</status>
      <action>Request</action>
      <command>Message</command>
      <messageId>0000001</messageId>
   </header>
   <payload>
       <content><display>2</display>1</content>
   </payload>
</message>
```

ist die Ausgabe ganz toll: 
	
	
	
	





```
[2, 1]
```

Wenn ich die XML aber so angeben:


```
<?xml version="1.0" encoding="UTF-8"?>
<message>
   <header>
      <status>OK</status>
      <action>Request</action>
      <command>Message</command>
      <messageId>0000001</messageId>
   </header>
   <payload>
       <content>
           <display>
               2
           </display>
           1
       </content>
   </payload>
</message>
```

Dann ist die Ausgabe:

```
[
               2
           , 
           1
       ]
```

Die XML Datei wird per JAXB Unmarshal eingelesen.
Wehalb werden hier Zeilenumbrüche hier als Value interpretiert und wie kann ich das verhindern?

Gruß


----------



## nillehammer (27. Nov 2012)

Statt dem hier:

```
else {
  if(!currentNode.getNodeValue().trim().equals("\n")){
    out.add(currentNode.getNodeValue());
  }
}
```
Mach mal das:

```
else if(currentNode.getNodeValue.trim().length() > 0){
    out.add(currentNode.getNodeValue());
}
```
Allgemeinere Tipps:
- Besser immer auf node type prüfen (== Node.TEXT_NODE)
- Mehr Variablen nutzen, um doppelte Methodenaufrufe zu vermeiden.


----------



## TKausL (27. Nov 2012)

```
out.add(currentNode.getNodeValue().trim());
```


----------



## Stroker89 (28. Nov 2012)

Danke hat super funktioniert TKausl


----------

