Anfängerfrage: Von wo kommt #text?

iChaos

Aktives Mitglied
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
Code:
<?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:
Java:
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
Code:
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
 
Zuletzt bearbeitet:

X5-599

Top Contributor
Versuch es mal damit:

Java:
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ß
 

Ähnliche Java Themen

Neue Themen


Oben