【发布时间】:2015-06-16 10:46:24
【问题描述】:
我正在尝试使用 StAX 和 JAXB 将一个大的 XML 分块成更小的部分。这是我正在处理的示例 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();
我能够正确读取第一条记录。但是在读取第一条记录后,流将移动到第二条记录内部,而不是 .因此我无法处理第二条记录。我不确定我哪里出错了。请帮忙。
【问题讨论】: