我試圖讀取一個大的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」})'。你還可以提供識別對象的類型嗎? –