我试图读取一个大的XML文件(像500MB)。 首先,我使用xjc和我的XML的XSD文件。所有类都按预期生成。 试图读取文件我有这个错误:javax.xml.bind.UnmarshalException:意外的元素。JAXB - 解组XML异常
这里是我的代码:
(...)
JAXBContext context = JAXBContext.newInstance("br.com.mypackage");
Unmarshaller unmarshaller = context.createUnmarshaller();
File f = new File("src/files/MyHuge.CNX");
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream in = new FileInputStream(f);
XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
Person p = null;
int count = 0;
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
if (event.isStartElement()) {
StartElement startElement = event.asStartElement();
if (startElement.getName().getLocalPart() == ("person")) {
p = (Person) unmarshaller.unmarshal(eventReader);
}
}
}
的问题是在解组操作。
Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"identification"). Expected elements are <{}messageAll>
我使用这个链接作为例子,使我自己的代码:JAXB - unmarshal OutOfMemory: Java Heap Space
有人有线索办呢?我现在想要的只是读取一个巨大的XML文件,而不用解组XML(java堆空间问题)的外部对象,也不需要通过标记获取相应的值来读取标记,慢速和猴子代码(不是Planet of the Planet的猴子的人猿)。 :P
非常感谢。
u能共享XML和这里使用的类及其JAXB映射?是否在包'br.com.mypackage'中有一个包含注释'@XmlRootElement(namespace =“”,name =“identification”)'的类' –
Arun,在Person类中有这样的注解: '@XmlAccessorType (XmlAccessType.FIELD)' '@XmlType(name =“”,propOrder = {“identification”,“address”,“whatever”})' 所以,我认为XJC会做所有与小事有关的事情注释。也许这是XSD文件上的问题? –
您可以在将它传递给解组器之前尝试打印事件阅读器的内容吗?它看起来像不是将'person'元素传递给传递'identification'元素的根。而'Person'类应该有@XmlType(name =“person”,propOrder = {“identification”,“address”,“whatever”})'。你还可以提供识别对象的类型吗? –