1

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

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

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

 try {
        while (streamReader .hasNext()) {

其中 inputStream 是 FileInputStream 实例

目前,当我开始第二阶段阅读时,我得到流关闭异常或 streamReader.hasNext() 为假。

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您必须迭代XML三次。

如果您只想阅读一次,您可以将数据存储在全局变量中,您可以在阅读时将三个阶段合二为一。

但是,如果您需要完成第一阶段以开始第二阶段,我建议您使用JaxB,它会将您转换为基于模式XMLJavaXSD对象,从而更容易以XML非顺序方式操作。

于 2015-06-25T11:21:16.897 回答