我们已经知道了怎么样去讲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的原理吧,知道了原理,才算真正的牛逼!!!