您的位置:首页 > 编程语言 > Java开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java xml Xtream