Привет, у меня есть такая структура 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;
}