为什么Element :: getElementsByTagNameNS会失败?

时间:2013-06-18 17:50:45

标签: java xml xml-parsing

给出XML实例文档:

<foo:A xmlns:foo="http://foo" >
    <foo:ListRecords>
        <foo:record>
        </foo:record>
    </foo:ListRecords>
</foo:A>

以下代码:

import java.io.File;

import javax.xml.parsers.*;
import org.w3c.dom.*;


public class FooMain {

    public static void main(String args[]) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(new File("record.xml"));
        Element rootElement = document.getDocumentElement();
        NodeList records1 = rootElement.getElementsByTagNameNS("*", "record");
        NodeList records2 = rootElement.getElementsByTagNameNS("http://foo", "record");
        NodeList records3 = rootElement.getElementsByTagName("foo:record");
        System.out.printf("%d records1 found.\n", records1.getLength());
        System.out.printf("%d records2 found.\n", records2.getLength());
        System.out.printf("%d records3 found.\n", records3.getLength());
    }
}

打印:

0 records1 found.
0 records2 found.
1 records3 found.

1 个答案:

答案 0 :(得分:3)

您需要一个名称空间感知解析器。 By default,JDK解析器不支持名称空间。

将您的代码更改为:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);