0
我想用StAX和JAXB將大塊XML分成較小的塊。這裏是我正在處理的示例XML:用XMLStreamReader失敗分塊XML
<asset>
<entity>
<record>
<field>
<id>remarks</id>
<value>ready to test1</value>
</field>
</record>
<record>
<field>
<id>input_quarter</id>
<value>Jun-Sep</value>
</field>
</record>
</entity>
</asset>
我想一次讀取記錄並處理它。下面是我如何做到這一點:
ClassPathResource classPathResource = new ClassPathResource("samples/form2/data/test.xml");
XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING, true);
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(classPathResource.getInputStream());
JAXBContext jaxbContext = JAXBContext.newInstance(EntityRecordData.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
while(xmlStreamReader.hasNext()){
int eventType = xmlStreamReader.next();
switch (eventType) {
case XMLEvent.START_ELEMENT:
System.out.println("Element: "+xmlStreamReader.getLocalName());
if("record".equals(xmlStreamReader.getLocalName())){
Object unmarshal = unmarshaller.unmarshal(xmlStreamReader);
}
break;
case XMLEvent.CHARACTERS:
String text = xmlStreamReader.getText();
System.out.println("Text: "+text);
break;
case XMLEvent.END_ELEMENT:
break;
default : break;
}
}
xmlStreamReader.close();
我能夠正確讀取第一條記錄。但是在讀完第一條記錄後,該流將移到第二條記錄中而不是。因此我無法處理第二條記錄。我不知道我哪裏出錯了。請幫忙。