2012-03-25 69 views
1

我試圖找出使用StaX IO,但我不斷從讀者變得「畸形」和「過早的EOF」錯誤。這是使用StaX創建的閱讀代碼,如以下示例所示。Java,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) 

我看了一下其他幾個做題(thisthis似乎最相關的),但我m有困難與他們有關這種情況...

編輯

此外,我已經嘗試過這種閱讀和寫作在單獨的操作,併發生同樣的事情。

編輯第二

XML輸出文件,作爲請求。

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

請張貼您的輸入xml。 – 2012-03-25 01:20:31

+0

沒有輸入XML,它是隨時可用的 - 我只是想創建一個標題,創建一個註釋,關閉文檔,然後再讀取它。 – Ben 2012-03-25 01:26:49

+0

這就是我的意思。 test.xml應該在你的文件系統中可用。 – 2012-03-25 01:36:06

回答

4

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

,然後讀取,沒有錯誤的第一個事件。

+0

啊,它確實如此。謝謝!儘管如此,我對此感覺不好,但還有更多令人頭疼的事情。 :) – Ben 2012-03-25 01:42:49

+1

頭痛更新:無!在這個小小的呃逆之後,很快就發現了一切。對未來的StaXers寄予厚望。 – Ben 2012-03-26 03:14:19

相關問題