XML和DOM获取#text输出

3

我正在尝试通过遍历子节点列表来读取Collada XML文件,但每隔一个输出都会读取#text。这是怎么回事?我的代码:

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 );
    }
}
1个回答

4
"

"#text"是在Text节点上调用getNodeName()方法的结果,(如果查看org.w3c.dom.Node的API文档会发现)。如果要获取节点的实际文本内容,应使用getNodeValue()方法。

如果您没有预期存在任何Text节点,请记住,即使是像换行符之类的小空白也被视为文本内容。

"

1
嗯。我预期文本节点中应该有文本。我只是没想到 getNodeName() 除了获取节点名称外还会做其他事情。在这里似乎它兼职成为 getNodeType() 或其他什么的。不管怎样,我不会质疑为什么,可能有一个很好的理由。目前我只需要添加类似 if( node_name == "#text" ) continue; 的代码来获得我想要的内容。 - Espen
为了以后的参考,有更好的方法来获取元素。请查看Element接口的getElementsByTagName方法。您可以使用getElementsByTagName("*")来获取给定元素的元素子级。如果您正在浏览NodeList,则需要进行一些转换为Element,但这是值得的。 - fakedad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接