1

下面是我必须使用的 xml:

<watermarks identifier="X" hostname="X">
   <watermark type="XX" value="1234"/>
   <watermark type="YY" value="1234" />
</watermarks>

我只想使用 JAXB 获取 Watermark 对象的列表,而无需创建新的 Watermarks 类。是否有可能或者我必须创建一个包含 Watermark 对象列表的 Watermarks 类?

谢谢。

4

1 回答 1

0

您可以使用StAX (JSR-173) XMLStreamReader来解析 XML 文档(从 Java SE 6 开始,JDK/JRE 中就包含了一个实现)。然后你可以将它推进到每个watermark元素,然后让JAXB (JSR-222)解组它。

演示

假设Watermark该类带有注释,@XmlRootElement您可以执行以下操作。

import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Watermark.class);
        Unmarshaller unmarshaller = jc.createUnmarshaller();

        StreamSource source = new StreamSource("input.xml");
        XMLInputFactory xif = XMLInputFactory.newFactory();
        XMLStreamReader xsr = xif.createXMLStreamReader(source);
        xsr.nextTag(); // Advance to "watermarks" element
        xsr.nextTag(); // Advance to "watermark" element

        while(xsr.getLocalName().equals("watermark")) {
             Watermark object = (Watermark) unmarshaller.unmarshal(xsr);
             System.out.println(object);
             xsr.nextTag();
        }
    }

}

完整示例

通用列表包装类

在我对以下问题的回答中,我提供了一个通用列表包装类的示例,您可能会发现它很有用。

于 2012-09-14T20:21:54.767 回答