2010-11-26 3 views
3

Ich versuche, eine Collada XML-Datei zu lesen, indem ich durch eine Kind-Knoten-Liste iteriert, und jede andere Ausgabe liest #text. Um was geht's hier? Mein Code:XML und DOM erhalten #text output

public void runTest() { 
    File file = new File("test.dae"); 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = null; 
    try { 
     builder = factory.newDocumentBuilder(); 
    } 
    catch(ParserConfigurationException error) { 
     System.out.println("--ParserConfigurationException: " + error.getMessage()); return; 
    } 
    Document document = null; 
    try { 
     document = builder.parse(file); 
    } 
    catch(IOException error) { 
     System.out.println("--IOException: " + error.getMessage()); return; 
    } 
    catch(SAXException error) { 
     System.out.println("--SAXException: " + error.getMessage()); return; 
    } 
    Node node = document.getDocumentElement(); 
    String node_name = node.getNodeName(); 
    System.out.println(node_name); 
    NodeList node_list = node.getChildNodes(); 
    for(int iterator = 0; iterator < node_list.getLength(); iterator++) { 
     Node child_node = node_list.item(iterator); 
     String child_node_name = child_node.getNodeName(); 
    System.out.println("-- " + child_node_name); 
    } 
} 

Antwort

4

"#text" ist einfach das Ergebnis der GetNodeName() -Methode auf einem Text-Knoten aufrufen. (Wie Sie sehen werden, wenn Sie sich die API-Dokumentation für org.w3c.dom.Node ansehen.) Wenn Sie den tatsächlichen Textinhalt des Knotens wünschen, verwenden Sie die Methode getNodeValue().

Und wenn Sie nicht erwartet haben, dass es Textknoten gibt, vergessen Sie nicht, dass auch kleine Leerzeichen, wie z. B. Zeilenumbrüche, als Text behandelt werden.

+1

Hmm. Ich würde erwarten, dass es Text in den Textknoten gibt. Ich habe einfach nicht erwartet, dass getNodeName() irgendetwas anderes tut, als den Namen des Knotens zu bekommen. Hier scheint es, als ob es getNodeType() oder was auch immer moonlights. Wie auch immer, ich werde mich nicht fragen, warum, es gibt wahrscheinlich einen guten Grund. Ab sofort muss ich nur Code hinzufügen, wenn if (node_name == "#text") fortfahren; um zu bekommen, was ich will. – Espen

+0

Für zukünftige Referenz gibt es einen besseren Weg, um nur die Elemente zu bekommen. Überprüfen Sie die 'getElementsByTagName' Methode der' Element' Schnittstelle. Sie können 'getElementsByTagName (" * ")' verwenden, um nur die untergeordneten Elemente eines bestimmten Elements zu erhalten. Es erfordert einige Umwandlung in 'Element', wenn Sie durch eine NodeList schauen, aber es ist es wert. – fakedad