JAXB如何推进XMLStreamReader?
我正在使用JAXB使用XMLStreamReader从非常大的XML文件解组对象。
如果我解组的XML元素是分开的(通过换行符或甚至单个空格),这可以正常工作。
如果我解组的XML元素之间没有空格,那么我就会丢失所有其他项目 – XML阅读器似乎会在取消编组之后吞下该元素。
简化的可运行示例的源代码可以在https://gist.github.com/dalelane/88df784c3cb74b214d5c上进行演示。
有趣的是:
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(inputStream); JAXBContext context = JAXBContext.newInstance(MyJAXBClass.class); Unmarshaller unmarshaller = context.createUnmarshaller(); boolean running = true; while (running){ switch (reader.next()){ case XMLStreamConstants.START_ELEMENT: if (reader.getLocalName().equals("myunmarshallobjname")){ JAXBElement unmarshalledObj = unmarshaller.unmarshal(reader, MyJAXBClass.class); MyJAXBClass item = unmarshalledObj.getValue(); } break; case XMLStreamConstants.END_DOCUMENT: reader.close(); running = false; break; } }
每次流阅读器命中元素的开头时,我都会将它传递给unmarshaller以解组该片段。
如果我有XML,它可以工作:
但如果我有以下情况,则丢失物品:
我究竟做错了什么? 如何让读者不要跳过元素?
请在解组呼叫后仔细检查您所在的元素事件。 如果XMLStreamReader
在endElement
你将需要调用next()
作为循环的一部分,但它不在startElement
。