2010-11-26 5 views
3

Je suis en train de lire un fichier XML Collada en parcourant une liste de nœud enfant, et chaque autre sortie se lit #text. C'est à propos de quoi? Mon code:XML et DOM obtenir #text sortie

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); 
    } 
} 

Répondre

4

"#text" est tout simplement le résultat de l'appel de la méthode GetNodeName() sur un nœud de texte. (Comme vous le verrez si vous regardez la documentation de l'API pour org.w3c.dom.Node.) Si vous voulez le contenu du texte du nœud, vous devez utiliser la méthode getNodeValue().

Et si vous ne vous attendiez pas qu'il y ait des nœuds de texte, ne pas oublier que même des petits morceaux de blancs, comme des caractères de nouvelle ligne, sont traités comme du texte.

+1

Hmm. Je m'attendrais à ce qu'il y ait du texte dans les nœuds de texte. Je ne me attendais pas GetNodeName() autre chose que, eh bien faire, obtenir le nom de noeud. Ici, il semble que ce soit clair comme getNodeType() ou autre. De toute façon, je ne vais pas me demander pourquoi, il y a probablement une bonne raison. A partir de maintenant je viens d'ajouter du code comme si (node_name == « #text ») continue; pour obtenir ce que je veux. – Espen

+0

Pour référence future, il y a une meilleure façon d'obtenir juste les éléments. Découvrez la méthode 'getElementsByTagName' de l'interface' Element'. Vous pouvez utiliser 'getElementsByTagName (" * ")' pour obtenir uniquement les éléments enfants d'un élément donné. Cela nécessite un certain casting vers 'Element' si vous regardez dans une liste de nœuds, mais ça vaut le coup. – fakedad