2012-03-25 9 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(); 
     } 
    } 
} 

そしてエラー:私は他のいくつかのSOの質問(thisまたはthisは、最も関連性の高いように見える)を見て持っていたが、私は」

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) 

この状況に関係することに問題があります...

EDIT

また、私はこの読み書きを別々の操作で試みましたが、同じことが起こります。

EDIT要求されたように、第2

XML出力ファイル、。

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

あなたの入力XMLも投稿してください。 –

+0

入力XMLがなく、即座に作成されました。ヘッダーを作成し、コメントを作成し、ドキュメントを閉じて、後で読みたいだけです。 – Ben

+0

それは私が意味するものです。 test.xmlはあなたのファイルシステムで利用できるはずです。 –

答えて

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

+1

頭痛のアップデート:なし!この小さなヒップアップの後に、他のすべてをかなり素早く把握しています。将来のStaXersへの願い。 – Ben

関連する問題