Java XML和DOM获取#文本输出

Java XML和DOM获取#文本输出,java,xml,dom,Java,Xml,Dom,我试图通过迭代子节点列表来读取Collada XML文件,并且每隔一次输出都读取#文本。这是怎么回事?我的代码: public void runTest() { File file = new File( "test.dae" ); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = null; try {

我试图通过迭代子节点列表来读取Collada XML文件,并且每隔一次输出都读取#文本。这是怎么回事?我的代码:

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 );
    }
}
public void运行测试(){
File File=新文件(“test.dae”);
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
DocumentBuilder=null;
试一试{
builder=factory.newDocumentBuilder();
}
捕获(ParserConfiguration异常错误){
System.out.println(“--ParserConfigurationException:+error.getMessage());返回;
}
单据=空;
试一试{
document=builder.parse(文件);
}
捕获(IOException错误){
System.out.println(“--IOException:+error.getMessage());返回;
}
捕获(SAX异常错误){
System.out.println(“--SAXException:+error.getMessage());返回;
}
Node=document.getDocumentElement();
字符串node_name=node.getNodeName();
System.out.println(节点名称);
NodeList node_list=node.getChildNodes();
for(int iterator=0;iterator
“#text”只是在文本节点上调用getNodeName()方法的结果。(如果您查看org.w3c.dom.Node的API文档,就会看到。)如果您想要节点的实际文本内容,可以使用getNodeValue()方法


如果您不希望有任何文本节点,请不要忘记,即使是一点点空白,如新行字符,也会被视为文本。

Hmm。我希望文本节点中会有文本。我只是不希望getNodeName()除了获取节点名之外做任何事情。在这里,它看起来像是作为getNodeType()或其他什么的月光。不管怎样,我不会质疑为什么,可能有一个很好的理由。到目前为止,我只需要添加如下代码:if(node_name==“#text”)continue;为了得到我想要的。为了将来的参考,有一个更好的方法来获取元素。查看
Element
界面的
getElementsByTagName
方法。您可以使用
getElementsByTagName(“*”)
仅获取给定元素的元素子元素。如果您正在查看节点列表,则需要对
元素进行一些转换,但这是值得的。