该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-16
最后修改:2010-04-16
虽然可以通过dom4j定义属于自己的策略将对象序列到xml文件中,但是thoughtworks公司提供的xstream 包含的功能很强大,一般的功能都涵盖了,而且使用起来也很方便。
一.持久化对象 package com.ysen; //这是一组简单的类。XStream能把这些类的实例转换到XML或是转换回来。 //注意到这些都是私有变量。XStream不关心变量的作用域。不需要getter或是setter方法。并且,XStream不限定需要默认的构造函数 public class Employee { private String name; private String designation; private String department; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesignation() { return designation; } public void setDesignation(String designation) { this.designation = designation; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } @Override public String toString() { return "Name : "+this.name+ "\nDesignation : "+this.designation+ "\nDepartment : "+this.department; } }
操作的对象 public class Writer { public static void main(String[] args) { Employee e = new Employee(); e.setName("Jack"); e.setDesignation("Manager"); e.setDepartment("Finance"); //Serialize the object //实例化XStream //使用XStream,简单实例化XStream类: XStream xs = new XStream(); // xs.omitField(Employee .class, "name"); //定义某一个属性的值不进行xml序列化。 // xs.useAttributeFor(String.class); // 对所有String类型的字段定义为属性tag显示 // xs.useAttributeFor("name",String.class);// 对所有String类型的字段名成为name 定义为属性tag显示,读取的时候获取不了该值 try { FileOutputStream fs = new FileOutputStream("d:/employeedata.xml"); xs.toXML(e, fs); } catch (FileNotFoundException e1) { e1.printStackTrace(); } } }
public class ConfigReader { String datasourcename = null; String ipaddress = null; String logfilename = null; String appender = null; @Override public String toString() { // This method prints out the values stored in the member variables return "Datasource Name : "+datasourcename+ " \nIP Address : "+ipaddress+ " \nLogfilename : "+logfilename+ " \nAppender : "+appender; } public static void main(String[] args) throws FileNotFoundException { XStream xs = new XStream(new DomDriver()); FileInputStream fis = new FileInputStream("d:/Config.xml"); //映射将对象属性datasourcename映射到xml别名datasource-name中 xs.aliasField("datasource-name", ConfigReader.class, "datasourcename"); //这是可选的一步。没有这步XStream也可以很好的起作用,但是XML元素的名字就会包含每个类的全称(包括包名),这将会使生成XML稍大。 xs.alias("config", ConfigReader.class); ConfigReader r = (ConfigReader)xs.fromXML(fis); System.out.println(r.toString()); } }
Config.xml
<?xml version="1.0" encoding="UTF-8"?> <config> <datasource-name>IRIS</datasource-name> <ipaddress>9.124.74.85</ipaddress> <logfilename>DailyLogApplication.log</logfilename> <appender>console</appender> </config>
二
public class Author { private String name; public Author(String name) { this.name = name; } public String getName() { return name; } }
public class Entry { private String title, description; public Entry(String title, String description) { this.title = title; this.description = description; } }
public class Blog { private Author writer; private List entries = new ArrayList(); public Blog(Author writer) { this.writer = writer; } public void add(Entry entry) { entries.add(entry); } public List getContent() { return entries; } public static void main(String[] args) throws FileNotFoundException { Blog teamBlog = new Blog(new Author("Guilherme Silveira")); teamBlog.add(new Entry("first","My first blog entry.")); teamBlog.add(new Entry("tutorial","Today we have developed a nice alias tutorial. Tell your friends! NOW!")); XStream xstream = new XStream(new DomDriver());//不需要XPP3库 //System.out.println(xstream.toXML(teamBlog)); //序列化一个对象到XML FileOutputStream fs = new FileOutputStream("d:/Blog.xml"); xstream.toXML(teamBlog, fs); //从XML反序列化一个对象 FileInputStream fis = new FileInputStream("d:/Blog.xml"); //从xml文件中加载对象是需要new XStream(new DomDriver()); Blog blog = (Blog)xstream.fromXML(fis); System.out.println(blog); } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-16
输出文件是什么样的?
|
|
返回顶楼 | |
发表时间:2010-04-16
骨之灵魂 写道 输出文件是什么样的?
可以保存到xml,如果你想生成String 类型 放到html中也行 |
|
返回顶楼 | |
发表时间:2010-04-17
老早以前学习过 《java & xml data binding》
但是工作中没有遇到过类似的需求 能问下楼主 这种技术一般应用在何处 或者在什么情况下 需要用到? |
|
返回顶楼 | |
发表时间:2010-04-17
Angel_Night 写道 老早以前学习过 《java & xml data binding》
但是工作中没有遇到过类似的需求 能问下楼主 这种技术一般应用在何处 或者在什么情况下 需要用到? xml 和 json 类似 都是用来作为序列化对象的 xml可以作为报文的格式可在不同语言的服务器之间传输数据,json 也是 常用的就是js 与 Java 的交流 |
|
返回顶楼 | |
发表时间:2010-04-17
我们公司系统就有用这个,将一个MAP转换成保存在oracle数据库的clob字段里
|
|
返回顶楼 | |
发表时间:2010-04-17
这个在confluence项目中有时候将一个对象转成xml文件后存储在了数据库中了,感觉那样挺好的。
|
|
返回顶楼 | |
发表时间:2010-04-17
引用 我们公司系统就有用这个,将一个MAP转换成保存在oracle数据库的clob字段里
asialee 写道 这个在confluence项目中有时候将一个对象转成xml文件后存储在了数据库中了,感觉那样挺好的。
原来有这么多奇妙的用法啊...长见识了 |
|
返回顶楼 | |
发表时间:2010-04-17
主子对象怎么做了,呵呵
|
|
返回顶楼 | |
发表时间:2010-04-17
确实挺好用的啊
|
|
返回顶楼 | |