我正在使用 StAX 通过从 StAXSource 转换为 DOMResult 来读取 XML 内容并将其部分解析为 DOM 片段。但是,当任何元素重新定义默认 XML 命名空间 (xmlns="") 时,这会导致 NullPointerException。演示情况的最少代码:
String xml =
"<?xml version=\"1.0\"?>"+
"<document>"+
" <element xmlns=\"\" />"+
"</document>";
StringReader reader = new StringReader(xml);
XMLInputFactory xif = XMLInputFactory.newFactory();
XMLStreamReader xsr = xif.createXMLStreamReader(reader);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
StAXSource source = new StAXSource(xsr);
DOMResult result = new DOMResult();
t.transform(source,result);
堆栈跟踪的开头是:
Caused by: java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.NamespaceMappings.pushNamespace(NamespaceMappings.java:233)
at com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.startPrefixMapping(ToXMLSAXHandler.java:362)...
据我了解,输入 XML 是有效的。Woodstox 实现可以毫无问题地转换 XML,但如果有办法配置或解决与 Java 捆绑的默认实现的问题,我不希望向我的应用程序添加更多依赖项。有什么办法吗?还是应该将其视为 Java 默认实现中的错误?