【问题标题】:Java, StaX simple code but get parse error, premature end of fileJava,StaX 简单代码,但出现解析错误,文件过早结束
【发布时间】:2012-03-25 01:17:31
【问题描述】:

我正在尝试使用 StaX 找出 IO,但我不断收到来自阅读器的“格式错误”和“过早 EOF”错误。这是读取使用 StaX 创建的代码,如下例所示。

我已将代码简化为最简单的配置,但仍然出现错误。这是哪里来的?

SSCCE(应该抛出错误)

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 问题(thisthis 似乎最相关),但我无法将它们与这种情况联系起来......

编辑

另外,我在不同的操作中尝试过这种读写操作,同样的事情发生了。

编辑第二个

XML 输出文件,根据要求。

<?xml version="1.0"?><!--As basic as it gets.-->

【问题讨论】:

  • 请同时发布您的输入 xml。
  • 无输入 XML,它是即时生成的 - 我只想创建一个标题、创建评论、关闭文档,然后再阅读它。
  • 这就是我的意思。 test.xml 应该在您的文件系统中可用。
  • 你能打印出 READER.nextEvent() 的值吗?
  • @AmitBhargava - 哦,好的,是的,更新了。

标签: java xml eof stax malformed


【解决方案1】:

它期望 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>

然后读取没有错误的第一个事件。

【讨论】:

  • 啊,确实如此。谢谢!不过,我对此有一种不好的感觉,肯定还有更多的头痛。 :)
  • 头痛更新:无!在这个小问题之后很快就解决了其他所有问题。向未来的 StaXers 致以最美好的祝愿。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 2010-10-17
  • 2011-09-11
  • 2013-04-08
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多