XStream 初探,很给力
2016-06-15 12:00
429 查看
Xtream 在对象和xml 互相转换上是非常方便且效率很高,所以把我的使用的心得给大家分享一下。
主要代码
/**
* Xstream 测试
* @return
*/
@RequestMapping("/forward/xstream")
public String xstream(){
String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><epay><items><item><id>2</id><name>cyc1</name></item><item><id>1</id><name>cyc</name></item></items></epay>";
XStream xstream = new XStream();
//获取生成的对象
TestVo testVo = getPerson();
//构建对应的节点(这里很重要构建生成的Xml 文件或者对象的节点)
xstream.alias("epay",TestVo.class);
xstream.aliasField("items",TestVo.class, "list");
xstream.alias("item", tests.class);
//将对象转为xml
String xml = xstream.toXML(testVo);
System.out.println("cyc==== XStream:"+xml);
//将xml转为对象
TestVo testVos = (TestVo) xstream.fromXML(str);
System.out.println("cyc==== testVos"+testVos);
//将对象再次转为xml
String xml2 = xstream.toXML(testVos);
System.out.println("cyc==== XStream2:"+xml2);
System.out.println("cyc==== Size:"+testVos.getList().size());
return "publicTpl/notChrome";
}
public TestVo getPerson(){
TestVo testVo = new TestVo();
List<tests> list = new ArrayList<tests>();
for(int i=0;i<10;i++){
tests tests = new tests();
tests.setId("1");
tests.setName("cyc");
list.add(tests);
}
testVo.setList(list);
return testVo;
}
TestVo类代码:
public class TestVo {
private List<tests> list;
public List<tests> getList() {
return list;
}
public void setList(List<tests> list) {
this.list = list;
}
@Override
public String toString() {
return "TestVo [list=" + list + "]";
}
}tests类代码:
public class tests {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "tests [id=" + id + ", name=" + name + "]";
}
}
输出结果:
cyc==== XStream:<epay>
<items>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
</items>
</epay>
cyc==== testVosTestVo [list=[tests [id=2, name=cyc1], tests [id=1, name=cyc]]]
cyc==== XStream2:<epay>
<items>
<item>
<id>2</id>
<name>cyc1</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
</items>
</epay>
cyc==== Size:2
(maven)所续的pom文件:
<dependency>
<groupId>xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.2.2</version>
</dependency>
注意事项:如果想在java 项目中运行这个需要添加一些关联的包不然的话会报一个:
Exception in thread "main" com.thoughtworks.xstream.io.StreamException: Cannot create XmlPullParser
at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:56)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1085)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1076)
at test.test3.main(test3.java:16)
Caused by: org.xmlpull.v1.XmlPullParserException: could not load any factory class (even small or full default implementation); nested exception is:
org.kxml2.io.XmlReader
at org.xmlpull.v1.XmlPullParserFactory.newInstance(XmlPullParserFactory.java:225)
at org.xmlpull.v1.XmlPullParserFactory.newInstance(XmlPullParserFactory.java:76)
at com.thoughtworks.xstream.io.xml.XppDriver.createParser(XppDriver.java:57)
at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:54)
... 3 more
主要代码
/**
* Xstream 测试
* @return
*/
@RequestMapping("/forward/xstream")
public String xstream(){
String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><epay><items><item><id>2</id><name>cyc1</name></item><item><id>1</id><name>cyc</name></item></items></epay>";
XStream xstream = new XStream();
//获取生成的对象
TestVo testVo = getPerson();
//构建对应的节点(这里很重要构建生成的Xml 文件或者对象的节点)
xstream.alias("epay",TestVo.class);
xstream.aliasField("items",TestVo.class, "list");
xstream.alias("item", tests.class);
//将对象转为xml
String xml = xstream.toXML(testVo);
System.out.println("cyc==== XStream:"+xml);
//将xml转为对象
TestVo testVos = (TestVo) xstream.fromXML(str);
System.out.println("cyc==== testVos"+testVos);
//将对象再次转为xml
String xml2 = xstream.toXML(testVos);
System.out.println("cyc==== XStream2:"+xml2);
System.out.println("cyc==== Size:"+testVos.getList().size());
return "publicTpl/notChrome";
}
public TestVo getPerson(){
TestVo testVo = new TestVo();
List<tests> list = new ArrayList<tests>();
for(int i=0;i<10;i++){
tests tests = new tests();
tests.setId("1");
tests.setName("cyc");
list.add(tests);
}
testVo.setList(list);
return testVo;
}
TestVo类代码:
public class TestVo {
private List<tests> list;
public List<tests> getList() {
return list;
}
public void setList(List<tests> list) {
this.list = list;
}
@Override
public String toString() {
return "TestVo [list=" + list + "]";
}
}tests类代码:
public class tests {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "tests [id=" + id + ", name=" + name + "]";
}
}
输出结果:
cyc==== XStream:<epay>
<items>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
</items>
</epay>
cyc==== testVosTestVo [list=[tests [id=2, name=cyc1], tests [id=1, name=cyc]]]
cyc==== XStream2:<epay>
<items>
<item>
<id>2</id>
<name>cyc1</name>
</item>
<item>
<id>1</id>
<name>cyc</name>
</item>
</items>
</epay>
cyc==== Size:2
(maven)所续的pom文件:
<dependency>
<groupId>xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.2.2</version>
</dependency>
注意事项:如果想在java 项目中运行这个需要添加一些关联的包不然的话会报一个:
Exception in thread "main" com.thoughtworks.xstream.io.StreamException: Cannot create XmlPullParser
at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:56)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1085)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1076)
at test.test3.main(test3.java:16)
Caused by: org.xmlpull.v1.XmlPullParserException: could not load any factory class (even small or full default implementation); nested exception is:
org.kxml2.io.XmlReader
at org.xmlpull.v1.XmlPullParserFactory.newInstance(XmlPullParserFactory.java:225)
at org.xmlpull.v1.XmlPullParserFactory.newInstance(XmlPullParserFactory.java:76)
at com.thoughtworks.xstream.io.xml.XppDriver.createParser(XppDriver.java:57)
at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:54)
... 3 more
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序