# Anfängerfrage: Von wo kommt #text?



## iChaos (22. Feb 2011)

Hi zusammen 

Folgendes Problem:

Ich schaue gerade das Thema XML an und soll einen Parser schreiben, welcher mir den Inhalt eines XMLs ausgibt(Baumstruktur). Das ganze soll am besten rekursiv sein.

Als Parser Lib verwende ich xerces.

Nun wird vor jedem Tag 2x #Text ausgegeben. Was soll das? Von wo kommt es? Wie kann ich es umgehen?
*Ok, nun herausgefunden, dass es sich hierbei um den Datentyp handelt, jedoch möchte ich nur die Struktur des XML's anzeigen, da sind Datentypen imo unwichtig*

Hier mal das XML

```
<?xml version="1.0" encoding="UTF-8"?>
<MP3 NAME="DAVID_GUETTA_MP3">
	<INTERPRET>
		David Guetta	
	</INTERPRET>
	<LENGTH>
		3.55
	</LENGTH>
	<ALBUM>
		TESTALBUM
		<COVER>
			PICTURE
		</COVER>
	</ALBUM>
	<LYRICS>
		111111111111111111111111111111111111111111111111111111	
	</LYRICS>
</MP3>
```

Parser:

```
public class DomParser {
	
	private Document doc;
	private DocumentBuilder documentBuilder;
	
	
	public DomParser(File fileForXML) {
		try{
			DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
			documentBuilder = documentBuilderFactory.newDocumentBuilder();
			doc = documentBuilder.parse(fileForXML);
			System.out.print("Root ist: " + doc.getDocumentElement());
			showXMLContent(doc.getDocumentElement());
		}
		catch (Exception exc) {
			exc.printStackTrace();
		}
	}
	
	
	public void showXMLContent(Node node){
		NodeList childs = node.getChildNodes();
		for (int i = 0; i < childs.getLength(); i++) {
			System.out.println(childs.item(i).getTextContent());
			showXMLContent(childs.item(i));
		}
	}

	
	public Node getRoot(){
		return doc.getDocumentElement();
	}
	
	public static void main(String[] args) {
		new DomParser(new File("xmlFiles/test.xml"));
	}
}
```


Ausgabe
	
	
	
	





```
Root ist: [MP3: null]#text
	
INTERPRET
		David Guetta	
	
#text
		David Guetta	
	
#text
	
LENGTH
		3.55
	
#text
		3.55
	
#text
	
ALBUM
		TESTALBUM
		
			PICTURE
		
	
#text
		TESTALBUM
		
COVER
			PICTURE
		
#text
			PICTURE
		
#text
	
#text
	
LYRICS
		111111111111111111111111111111111111111111111111111111	
	
#text
		111111111111111111111111111111111111111111111111111111	
	
#text
```


----------



## X5-599 (22. Feb 2011)

Versuch es mal damit:


```
public void showXMLContent(Node node) {
    int type = node.getNodeType();
    if(type == Node.ELEMENT_NODE)
    	System.out.println("Node: " + node.getNodeName());
    if(type == Node.TEXT_NODE)
    	System.out.println("Text: " + node.getNodeValue());
    	
    NodeList nodeList = node.getChildNodes();
    for (int i = 0; i < nodeList.getLength(); i++) {
    	showXMLContent(nodeList.item(i));
    }
}
```

Ich nehme an der Knackpunkt ist, dass sowas wie: David Guetta, 3.55 oder TESTALBUM auch als eigenständiger Node gewertet wird. Nämlich als TEXT_NODE. Darum, wenn man den Node von z.B. INTERPRET hat bekommt man bei
node.getChildNodes() eine Liste mit einem Kind Node zurück. Eben den TEXT_NODE mit Wert "David Guetta"...

Aber wie immer: meine Behauptungen sind ohne Gewähr 

Gruß


----------



## Woodstock (27. Feb 2011)

Hallo,



> und soll einen Parser schreiben





> Als Parser Lib verwende ich xerces



Hmm...


----------

