以下是如何使用 JAXB ( JSR-222 ) 完成此操作。Java SE 6 中包含一个实现。还有其他实现,例如EclipseLink MOXy(我是技术主管)。
简短的回答
您可以将以下 API 调用与带有任何注释或 XML 模式的 JAXB 一起使用。
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<URL> urls;
public List<URL> getUrls() {
return urls;
}
public void setUrls(List<URL> 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<Sitemap> jaxbElement = unmarshaller.unmarshal(xml, Sitemap.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jaxbElement, System.out);
}
}
输入.xml/输出
<?xml version="1.0" encoding="UTF-8"?>
<sitemap>
<urls>http://www.eclipse.org/eclipselink/moxy.php</urls>
<urls>http://jaxb.java.net</urls>
</sitemap>
了解更多信息