以下是如何使用JAXB(JSR-222)完成此操作. Java SE 6中包含一个实现.还有其他实现,例如EclipseLink MOXy(我是技术负责人).
短答案
您可以对JAXB使用以下带有任何注释或XML模式的API调用.
Sitemap sitemap = JAXB.unmarshal(xml, Sitemap.class);
长答案
下面是一个更详细的示例.
网站地图
我已经稍微修改了您的课程.我不确定Url类是什么,所以我将其更改为java.net.URL.注意如何在域模型上不需要注释.
package forum10854001;
import java.net.URL;
import java.util.List;
public class Sitemap {
private List urls;
public List getUrls() {
return urls;
}
public void setUrls(List urls) {
this.urls = urls;
}
}
演示版
我创建了一个JAXBContext,而不是简短答案中使用的代码. JAXBContext是一个线程安全的对象,代表所有已初始化的元数据. Marshaller和Unmarshaller对象提供了超过JAXB类的更多灵活性.
下面的代码演示了如何读取XML并将其写回:
package forum10854001;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Sitemap.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
StreamSource xml = new StreamSource("src/forum10854001/input.xml");
JAXBElement jaxbElement = unmarshaller.unmarshal(xml, Sitemap.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jaxbElement, System.out);
}
}
input.xml /输出
http://www.eclipse.org/eclipselink/moxy.php
http://jaxb.java.net
欲获得更多信息