gpt4 book ai didi

java - 从 Stax 转换为 DOM 导致 NullPointerException

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:07 25 4
gpt4 key购买 nike

我正在使用 StAX 读取 XML 内容,并通过从 StAXSource 转换为 DOMResult 将其部分解析为 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 默认实现中的错误?

最佳答案

使用有效的xml文件

尝试更改您的代码

   XMLInputFactory xif = XMLInputFactory.newInstance();
XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("test.xml"));
xsr.nextTag();

TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
while(xsr.nextTag() == XMLStreamConstants.START_ELEMENT) {
DOMResult result = new DOMResult();
t.transform(new StAXSource(xsr), result);
Node domNode = result.getNode();
}

关于java - 从 Stax 转换为 DOM 导致 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13929319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com