我分三个阶段读取xml文件,在每个阶段,我对基于输入参数的不同元素感兴趣。
使用XMLStreamReader多次读取一个xml文件的最佳方法是什么?
xmlInputFactory = XMLInputFactory.newInstance();
try {
XMLStreamReader streamReader xmlInputFactory.createXMLStreamReader(inputStream);
try {
while (streamReader .hasNext()) {
其中inputStream是FileInputStream实例
目前,当我开始第二阶段阅读时,我得到流关闭异常或streamReader.hasNext()为false。
答案 0 :(得分: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));
答案 1 :(得分:0)
如果您要访问的数据不是按顺序排列,则使用XMLStreamReader
必须迭代XML
三次。
如果您只想阅读一次,您可以将数据存储在全局变量中,您可以在阅读过程中将其填入三个阶段。
但是如果您需要完成第一阶段以开始第二阶段,我建议您使用JaxB
,它会将XML
转换为基于Java
对象的XSD
XML
架构可以更加轻松地以非顺序方式操作BitmapDrawable
。