如何使用XMLStreamReader多次读取同一个XML文件



我分三个阶段读取xml文件,在每个阶段,我都对基于输入参数的不同元素感兴趣。

使用XMLStreamReader多次读取一个xml文件的最佳方法是什么?

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

其中inputStream是FileInputStream实例

目前,当我开始第二阶段读取时,我要么得到流关闭异常,要么streamReader.hasNext()为false。

将文件加载到内存中并使用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));

如果要访问的数据不是按顺序排列的,则使用XMLStreamReader必须在XML上迭代三次。

如果你只想读取一次,你可以将数据存储在全局变量中,你可以在读取过程中填写三个阶段。

但是,如果您需要完成第一阶段才能开始第二阶段,我建议您使用JaxB,它将在基于XSD架构的Java对象中转换XML,从而更容易以非顺序方式操作XML

相关内容

  • 没有找到相关文章

最新更新