最近在做一些XML和JAVA类相互转换的过程中发现了这个开源项目 SimpleXml。
android开发框架中已经集成了该框架。
相关介绍的文章大家也可以参考下使用 Simple 简化 XML 序列化
一、简单的例子
代码清单1:
一个普通的JavaBean
import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; @Root public class Student { @Attribute private int stu_id; @Element private String stu_no; @Element public String stu_type; @Element private String stu_name; @Element private String stu_class; @Element private String stu_year; public String getStu_type() { return stu_type; } public void setStu_type(String stu_type) { this.stu_type = stu_type; } public String getStu_class() { return stu_class; } public void setStu_class(String stu_class) { this.stu_class = stu_class; } public String getStu_year() { return stu_year; } public void setStu_year(String stu_year) { this.stu_year = stu_year; } public String getStu_no() { return stu_no; } public void setStu_no(String stu_no) { this.stu_no = stu_no; } public int getStu_id() { return stu_id; } public void setStu_id(int stu_id) { this.stu_id = stu_id; } public String getStu_name() { return stu_name; } public void setStu_name(String stu_name) { this.stu_name = stu_name; } }
代码清单2:
public class SimpleXMLTest { /** * 测试创建xml文档 */ @Test public void testCreateXml() { try { Serializer serializer= new Persister(); Student stu = new Student(); stu.setStu_id(1); stu.setStu_no("201205001"); stu.setStu_type("经济学"); stu.setStu_name("慕容雪"); stu.setStu_class("005班"); stu.setStu_year("2012"); File result = new File("./src/student.xml"); serializer.write(stu, result); } catch (Exception e) { e.printStackTrace(); } } }
执行后即可创建一个student.xml文档,内容如下:
<student stu_id="1"> <stu_no>201205001</stu_no> <stu_type>经济学</stu_type> <stu_name>慕容雪</stu_name> <stu_class>005班</stu_class> <stu_year>2012</stu_year> </student>
是不是很简单?和那些Dom4j,Parser相比,更容易操作。
读取XML也变得异常简单
@Test public void testReadXML(){ try { Serializer serializer =new Persister(); File source = new File("./src/student.xml"); Student stu=serializer.read(Student.class, source); System.out.println(stu.getStu_name()); System.out.println(stu.getStu_no()); System.out.println(stu.getStu_type()); System.out.println(stu.getStu_year()); System.out.println(stu.getStu_class()); System.out.println(stu.getStu_id()); } catch (Exception e) { e.printStackTrace(); } }
相比那些要获取节点,获得元素,操作各种Dom模型的传统方式,是不是清晰明了了许多。
目前我正在按照官方文档的Demo 测试对各种数据对象的支持.例子在最后共享在115网盘。
Demo文档还是比较丰富的,建议大家通读一遍。
二、总体感觉:
1.上手很快
2.操作简便易懂
3.基于注解实现,零配置(现在貌似零配置很流行)
4.可以自定义模板XML(嘻嘻,和velocity不一样的)
5.支持序列化和反序列化
6.泛型支持比较好
缺点:
1.必须要依赖POJO类
2.只能生成XML
三、使用要点
在simpleXml中这个类很重要
Serializer接口 及其实现子类Persister
Serializer serializer=new Persister();
将POJO类写入XML
serializer.write(Object object, File file);
读取XML内容
Object object=serializer.read(Object.class, File file);
几种常用注解
//XML的根元素,一般在类上面声明 @Root
//对XML属性的标识 @Attribute
//对XML中元素的标识 @Element
//对数组对象的标识 @ElementArray(entry="add")
//对XML中集合属性的标识 @ElementList
当然这仅仅是我初步使用simpleXml的一些心得,下次对序列化,持久化对象,以及模板xml的创建继续深入研究。
不足之处,还请各位大牛批评指正!