1

私は 3 つのフェーズで xml ファイルを読み取り、各フェーズで、入力パラメーターに基づいてさまざまな要素に関心があります。

XMLStreamReaderを使用して1つのxmlファイルを複数回読み取るための最良の方法は何ですか?

xmlInputFactory = XMLInputFactory.newInstance();
    try {
        XMLStreamReader streamReader xmlInputFactory.createXMLStreamReader(inputStream);

 try {
        while (streamReader .hasNext()) {

ここで、inputStream は FileInputStream インスタンスです

現時点では、第 2 フェーズの読み取りを開始すると、ストリーム クローズド例外が発生するか、streamReader.hasNext() が false になります。

4

2 に答える 2

0

ファイルをメモリにロードし、ByteArrayInputStream を使用します

File f = ...;
int len = (int)f.length(); // careful: If the life is over 4 gigs this won't work
byte myXML[] = new byte[];
FileInputStream fis = new FileInputStream(f);
int read = fis.read(f); // not guarenteed to read all bytes, but in my experience, this reads all bytes
if (read != len) throw RuntimeExcption("Didn't read everything");

// Now you can create as many XMLStreamReaders as you want like

    try {
        XMLStreamReader streamReader xmlInputFactory.createXMLStreamReader(new ByteArrayInputStream(buf));
于 2015-06-25T11:20:37.950 に答える
0

到達したいデータが順番どおりでない場合はXMLStreamReader、3 回反復する必要があります。XML

1 回だけ読み取りたい場合は、グローバル変数にデータを格納して、読み取り中に入力できるデータを 1 つに 3 つのフェーズにすることができます。

ただし、最初のフェーズを終了して 2 番目のフェーズを開始する必要がある場合は、を使用することをお勧めします。スキーマに基づいてオブジェクトにJaxB変換XMLJavaXSDXMLされ、非連続的な方法でを簡単に操作できます。

于 2015-06-25T11:21:16.897 に答える