2015-06-25 44 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在非顺序的方式。