Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Stax转换为DOM会导致NullPointerException_Java_Stax - Fatal编程技术网

Java 从Stax转换为DOM会导致NullPointerException

Java 从Stax转换为DOM会导致NullPointerException,java,stax,Java,Stax,我使用StAX读取XML内容,并通过从StAXSource转换到DOMResult将部分内容解析为DOM片段。但是,当任何元素重新定义默认XML命名空间(xmlns=”“)时,这会导致NullPointerException。演示这种情况的最少代码: String xml = "<?xml version=\"1.0\"?>"+ "<document>"+ " <element xmlns=\"\" />"+ "</document&g

我使用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);
据我所知,输入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();
            }

我建议使用SAX,即使使用xmlns=“”也可以正常工作

   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();
            }
XMLReader xr = XMLReaderFactory.createXMLReader();
Source source = new SAXSource(xr, new InputSource(reader));