【发布时间】:2015-05-12 04:07:26
【问题描述】:
您好,我有一个这样的 XML 结构:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<result>
<name>Chrome</name>
<version>2</version>
</result>
<result>
<name>IE</name>
<version>8</version>
</result>
</response>
我正在尝试使用 staxx 来解析 JAXB 中间的内容。我得到的问题是它没有得到所有结果元素。见下文:
输出:
response
result
name
version
如何获取所有结果对象,内部可以是我传入的任何通用对象?另外,有没有办法在我用 jaxb 解析对象后,将 staxx 迭代器推进到 , 的末尾(因为一旦我有了对象,解析其余部分就没有什么意义了)。
private static <T> List<T> unmarshallCreateResponseObject(Class<T> clazz, String xml) throws JAXBException, XMLStreamException
{
List<T> list = new ArrayList<T>();
XMLInputFactory xif = XMLInputFactory.newFactory();
StringReader stringReader = new StringReader(xml);
XMLStreamReader xsr = xif.createXMLStreamReader(stringReader);
while (xsr.hasNext()) {
int eventType = xsr.next();
if(eventType == XMLStreamReader.START_ELEMENT){
System.out.println(xsr.getLocalName());
if(xsr.getLocalName().equals("result"))
{
JAXBContext jc = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<T> jb = unmarshaller.unmarshal(xsr, clazz);
list.add(jb.getValue());
}
}
}
xsr.close();
return list;
}
【问题讨论】: