考虑以下输入xml文档:

<oracle:EMP xmlns:oracle="http://www.oracle.com/xml"/>

...以及以下处理程序:
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);
    }
}

当将它与SAXParser一起使用时,我期望以下输出:
uri: http://www.oracle.com/xml
localName: EMP
qName: oracle:EMP

但是我得到了这个:
uri:
localName:
qName: oracle:EMP

为什么?如何获得正确的信息?

最佳答案

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

需要在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);

09-11 20:19