我有这个XML
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:listItemsResponse xmlns:ns2="http://soap.ws.server.wst.fit.cvut.cz/">
<return>
<code>OK</code>
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="ns2:items">
<item>
<itemId>1540041177</itemId>
<price>5109</price>
</item>
<item>
<itemId>696734629</itemId>
<price>5453</price>
</item>
<item>
<itemId>1853843391</itemId>
<price>5088</price>
</item>
</data>
</return>
</ns2:listItemsResponse>
</soap:Body>
</soap:Envelope>
我希望将data
元素解组到我的POJO(不是整个XML,只是它的一部分)。是否可以使用JAXB?
@XmlRootElement(name = "data")
public class Data {
private List<Item> items;
public Data() {
}
@XmlElement(name = "item")
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
@Override
public String toString() {
return "Data [" + (items != null ? "items=" + items : "") + "]";
}
}
答案 0 :(得分:2)
您可以使用StAX XMLStreamReader
前进到您感兴趣的内容,然后解组。
了解更多信息
答案 1 :(得分:0)
我忘了提到我正在使用DOM。但我找到了解决方案
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(new ByteArrayInputStream(body.getBytes()));
document.getDocumentElement().normalize();
当我遍历文档中的节点时,我可以简单地(当我有我想要的节点时)
JAXBContext jaxbContext = JAXBContext.newInstance(Data.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Data data = (Data) jaxbUnmarshaller.unmarshal(node);