解组XML的一部分

时间:2012-12-27 14:35:32

标签: java xml xml-parsing jaxb unmarshalling

我有这个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 : "") + "]";
    }

}

2 个答案:

答案 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);