Java,StaX简单代码但得到解析错误,文件过早结束
我试图用StaX来计算IO,但我不断从阅读器中得到格式错误和过早的EOF错误。这是读取使用StaX创建的代码,如以下示例所示 我已经将代码简化为最简单的配置,但仍然得到一个错误。这是从哪里来的 SSCCE应该抛出错误Java,StaX简单代码但得到解析错误,文件过早结束,java,xml,eof,stax,malformed,Java,Xml,Eof,Stax,Malformed,我试图用StaX来计算IO,但我不断从阅读器中得到格式错误和过早的EOF错误。这是读取使用StaX创建的代码,如以下示例所示 我已经将代码简化为最简单的配置,但仍然得到一个错误。这是从哪里来的 SSCCE应该抛出错误 package XMLTest; import java.io.FileInputStream; import java.io.FileOutputStream; import javax.xml.stream.XMLEventFactory; import javax.xml
package XMLTest;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
public class SaveLoadTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
final String FILE = "test.xml";
//////////// WRITE
final XMLOutputFactory OFACT = XMLOutputFactory.newInstance();
final XMLEventFactory EFACT = XMLEventFactory.newInstance();
final XMLEventWriter WRITER = OFACT.createXMLEventWriter(new FileOutputStream(FILE));
WRITER.add(EFACT.createStartDocument());
WRITER.add(EFACT.createComment("As basic as it gets."));
WRITER.add(EFACT.createEndDocument());
WRITER.close();
//////////// READ
final XMLInputFactory IFACT = XMLInputFactory.newInstance();
final XMLEventReader READER = IFACT.createXMLEventReader(new FileInputStream(FILE));
while (READER.hasNext()) {
READER.nextEvent();
}
}
}
错误是:
Exception in thread "main" javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,49]
Message: Premature end of file.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:594)
at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:85)
at XMLTest.SaveLoadTest.main(SaveLoadTest.java:34)
我已经看了几个其他的SO问题,或者看起来最相关,但是我很难将它们与这种情况联系起来
编辑
另外,我尝试过在不同的操作中读写,同样的事情也发生了
编辑第二个
XML输出文件,如请求
<?xml version="1.0"?><!--As basic as it gets.-->
它期望XML文件具有根元素 如果将输出代码更改为创建元素,则该代码将正常工作:
WRITER.add(EFACT.createStartDocument());
WRITER.add(EFACT.createStartElement("", "", "element"));
WRITER.add(EFACT.createEndElement("", "", "element"));
WRITER.add(EFACT.createEndDocument());
输出到文件中
<?xml version="1.0" encoding="UTF-8"?><element></element>
然后无错误地读取第一个事件。它希望XML文件具有根元素 如果将输出代码更改为创建元素,则该代码将正常工作:
WRITER.add(EFACT.createStartDocument());
WRITER.add(EFACT.createStartElement("", "", "element"));
WRITER.add(EFACT.createEndElement("", "", "element"));
WRITER.add(EFACT.createEndDocument());
输出到文件中
<?xml version="1.0" encoding="UTF-8"?><element></element>
然后读取第一个事件,没有错误。请同时发布您的输入xml。没有输入xml,它是动态生成的-我只想创建一个标题,创建一条注释,关闭文档,然后稍后再阅读。这就是我的意思。test.xml应该在你的文件系统中可用。你能打印出READER.nextEvent的值吗?@AmitBhargava-哦,好的,是的。请发布你的输入xml。没有输入xml,它是动态生成的-我只想创建一个标题,创建一条注释,关闭文档,然后稍后阅读。这就是我的意思。test.xml应该在你的文件系统中可用。你能打印出READER.nextEvent的值吗?@AmitBhargava-哦,好的,是的,更新了。啊,它是这样的。谢谢不过我有一种不好的预感,肯定还会有更多的头痛头痛更新:没有!在这个小小的打嗝之后,其他的事情都很快解决了。向未来的施塔克斯致以最美好的祝愿。啊,的确如此。谢谢不过我有一种不好的预感,肯定还会有更多的头痛头痛更新:没有!在这个小小的打嗝之后,其他的事情都很快解决了。向未来的施塔克斯致以最良好的祝愿。