Java 中使用 SAX 处理命名空间

lvi*_*ani 3 java xml-namespaces saxparser

考虑以下输入 xml 文档:

<oracle:EMP xmlns:oracle="http://www.oracle.com/xml"/>
Run Code Online (Sandbox Code Playgroud)

...以及以下处理程序:

final class XMLizatorSaxHandler extends DefaultHandler {
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        System.out.println(uri + "," + localName + "," + qName);
    }
}
Run Code Online (Sandbox Code Playgroud)

当将它与 a 一起使用时,SAXParser我预计会出现以下输出:

uri: http://www.oracle.com/xml
localName: EMP
qName: oracle:EMP
Run Code Online (Sandbox Code Playgroud)

但我得到的是这个:

uri:
localName:
qName: oracle:EMP
Run Code Online (Sandbox Code Playgroud)

为什么?我怎样才能得到正确的信息?

lvi*_*ani 5

好的,感谢史蒂夫的提示我找到了解决方案。

需要SaxParserFactory.setNamespaceAware(true);提前打电话SaxParserFactory.newSAXParser();

这是完整的代码:

SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
saxParserFactory.setNamespaceAware(true); // here is the trick

SAXParser parser = saxParserFactory.newSAXParser();
MyHandler handler = new MyHandler();

parser.parse(in, handler);
Run Code Online (Sandbox Code Playgroud)