2015-06-25 82 views
0

我以三個階段讀取xml文件,並且在每個階段中,我對基於輸入參數的不同元素感興趣。如何使用XMLStreamReader多次讀取同一個XML文件

什麼是使用XMLStreamReader更多次讀取一個XML文件的最佳方法?

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

try { 
     while (streamReader .hasNext()) { 

其中InputStream爲的FileInputStream實例

目前,我得到的音頻或視頻流閉合異常或streamReader.hasNext()是假的,當我開始第二階段的閱讀。

回答

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)); 
0

使用XMLStreamReader必須遍歷XML三次,如果你想達到的數據不是按順序。

如果您只想讀取一次,則可以將數據存儲在全局變量中,您可以在讀取過程中填充三個階段。

但是如果你需要完成第一階段啓動第二,我會建議你使用JaxB,它會轉換你的XML基於在XSD模式使得更容易Java對象操縱XML在非順序的方式。