Xstream能干什么:
一、将XML文件解析为java对象
二、将java对象解析为XML文件
注:附件为使用XStream所依赖的jar包
1:首先可以看这么一个xml文件,目的就是要解析它到java对象:
<?xml version="1.0" encoding="GB2312"?> <cn.javasd.xstream.XstreamList> <testList> <cn.javasd.xstream.TestDto> <NAME>张路平</NAME> <USER>luping</USER> <PASSWORD>asd3839729</PASSWORD> </cn.javasd.xstream.TestDto> <cn.javasd.xstream.TestDto> <NAME>邢敏娜</NAME> <USER>minna</USER> <PASSWORD>3839729asd</PASSWORD> </cn.javasd.xstream.TestDto> </testList> <other>Just a String!</other> </cn.javasd.xstream.XstreamList>
2、定义转换后的java类
package cn.javasd.xstream; import java.util.List; public class XstreamList { private List testList; private String other; //省略 getters and setters }
通过比对XML文件的标签会发现这个类对应的是 <cn.javasd.xstream.XstreamList> 标签
testList属性对应<testList>标签
other属性对应<other>标签
看到这里想必也明白了Xstream的范式了,
这里我还定义了一个DTO,对应xml文件可以发现,它对应的就是 <cn.javasd.xstream.TestDto> 标签
这个标签在 <testList> 标签下,所以很容易理解就是 XstreamList 类中List中所填充的对象,这个DTO如下:
package cn.javasd.xstream; public class TestDto { private String NAME; private String USER; private String PASSWORD; //省略getters and setters }
3、解析XML文件到java对象
XML文件有了,对应的 java 对象也有了,怎么建立之间的关系呢
下面这个测试方法类就完成了解析,为了方便阅读,我将讲解都放到了类中的注释
这里面用到了Spring解析文件用的Resource类,提供了三种获取配置文件的方法,
当然Spring对这三种方法(其实还有)做了策略封装,这里为了方便,
就直接调用相应的类,不过,这不是这篇文章的重点,大家也可以用java的流去解析
package cn.javasd.xstream; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; public class TestXStream { @SuppressWarnings("unchecked") public static void main(String args[]) throws IOException{ //以下三种获取方式均可以获取Resource资源 //1、按照classpath查找 @SuppressWarnings("unused") Resource resource1 = new ClassPathResource("cfg/testXStream.xml"); //2、按照文件系统查找 @SuppressWarnings("unused") Resource resource2 = new FileSystemResource("D:\\My Java Work6\\jms\\src\\cfg\\testXStream.xml"); //3、按照URL查找,如果要查找本地文件,前面可以加file 对应非本地的可以加 ftp 等 Resource resource3 = new UrlResource("file:/D:/My Java Work6/jms/src/cfg/testXStream.xml"); //提供的一些方法,可以自己试试 //获取文件的上次修改的时间 System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(resource3.lastModified()))); //获取配置文件的输入流 InputStream is = resource3.getInputStream(); //new一个Xstream对象,有些时候也可以new XStream(); 但是我这里报错,需要指定解析驱动,就写成了下面这样 XStream stream = new XStream(new DomDriver()); //完成对象的转换,很简单,就是一个fromXML(InputStream is)方法 XstreamList xstreamList = (XstreamList)stream.fromXML(is); //循环遍历打印展示结果 List<TestDto> list = xstreamList.getTestList(); for(TestDto dto:list){ System.out.println(xstreamList.getOther()); System.out.println(dto.getNAME() + " -- " + dto.getUSER() + " -- " + dto.getPASSWORD()); } //第二项功能,将java对象序列化输出为 xml //设置别名,为输出的xml进行简化,可以将下面一行注掉比对下输出结果 stream.alias("Xlist", XstreamList.class); //调用 toXML(Object obj);方法完成转换 String s = stream.toXML(xstreamList); System.out.println(s); //不推荐这么写,开发中最好编写完整的 try catch块 is.close(); } }
到此为止,XStream的两个基本用法就完成了,以上实例均在本地运行过,不过要添加相应的getter and setter方法
抛砖引玉,有错误或高级应用的,望不吝赐教。