3

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

}
4

2 回答 2

1

您可以使用 StAXXMLStreamReader前进到您感兴趣的内容,然后将其解组。

了解更多信息

于 2012-12-27T14:49:28.933 回答
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);
于 2012-12-27T14:53:21.287 回答