我们已经知道了怎么样去讲xml转成对象了,现在,我们要把对象成xml文件,那怎么搞呢??
非常简单,大家跟着我一步一步去做就OK啦。
我们现在有3个姑娘,分别是小红,小芳,小丽,现在,我们要把他们三个的信息存进一个叫girl.xml的文件中,并且这个xml的根节点叫root。我们首先定义好Girl。
@XmlAccessorType(XmlAccessType.FIELD)
class Girl {
public Girl(){
super();
}
public Girl(String name,String age,String cup){
this.name=name;
this.age=age;
this.cup=cup;
}
@XmlElement(name = "name")
private String name;
@XmlElement(name = "age")
private String age;
@XmlElement(name = "cup")
private String cup;
public String toString(){
return name+","+age+","+cup+"\n";
}
//get方法和set方法···
}
我们还要定义一个Root,因为他是根节点,并且他是所有的Girl的父节点,大家看:
@XmlRootElement(name = "root")
class Root{
@XmlElement(name = "girl")
private List<Girl> girls;
public List<Girl> getGirls() {
return girls;
}
public void setGirls(List<Girl> girls) {
this.girls = girls;
}
}
我们跑起来看看:
public static void main(String[] args) {
try {
JAXBContext jaxbC = JAXBContext.newInstance(Root.class);
Marshaller ms=jaxbC.createMarshaller();
ms.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
Root root=new Root();
List<Girl> girls=new ArrayList<Girl>();
Girl g1=new Girl("小红", "20", "F");
Girl g2=new Girl("小芳", "16", "A");
Girl g3=new Girl("小丽", "17", "B");
girls.add(g1);
girls.add(g2);
girls.add(g3);
root.setGirls(girls);
StringWriter sw=new StringWriter();
ms.marshal(root, sw);
System.out.println(sw.toString());
} catch (JAXBException e) {
e.printStackTrace();
}
}
点击run,大家看:
是不是很赞???
来来来,总结一下,将java对象转成xml,用marshaller这个接口,我们需要做以下的事情:
1、定义好pojo,上面例子中的Girl和Root类
2、获取JAXBContext(jaxb上下文)
3、 Marshaller ms=jaxbC.createMarshaller();
ms.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
创建marshaller的接口并且给他设置属性
4、给Root,Girl赋值,并且执行 ms.marshal(root, sw);
总结完用法之后,我们来学习一下Unmarshaller和Marshaller的原理吧,知道了原理,才算真正的牛逼!!!