您可以使用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();
}
}
}
完整示例
通用列表包装类
在我对以下问题的回答中,我提供了一个通用列表包装类的示例,您可能会发现它很有用。