Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将javaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。
一、所需jar包
下载xstream-x.x.x.jar,放到项目中
二、无anotation实例
1、先创建一个Person.java
package com.xu.xstream; import java.util.List; public class Person { private int id; private String name; private String sex; private List<Address> address; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public List<Address> getAddress() { return address; } public void setAddress(List<Address> address) { this.address = address; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", sex=" + sex+ ", address=" + address + "]"; } }
2、创建PersonXStream.java操作
package com.xu.xstream; import java.util.ArrayList; import java.util.List; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; /** * PersonXStream.java * @author XuRuiLu * * 2015-3-2 */ public class PersonXStream { /** * java对象转换成XML * @param person * @return */ public static String javaObjectToXml(Person person){ XStream xstream = new XStream(new DomDriver()); xstream.alias("Person", Person.class); //使用别名 xstream.alias("Address", Address.class); //使用别名 // xstream.useAttributeFor(Person.class, "name"); //将本类中的字段来作为xml的属性 xstream.addImplicitCollection(Person.class, "address"); //隐身集合 return xstream.toXML(person); } /** * Xml转换成java对象 * @param xml * @return */ public static Person xmlToJavaObject(String xml){ Person person = null; XStream xstream = new XStream(new DomDriver()); //注意这里前面是用别名,这里也要用别名,不然会报错找不到节点 xstream.alias("Person", Person.class); xstream.alias("Address", Address.class); xstream.addImplicitCollection(Person.class, "address"); //隐身集合 person = (Person)xstream.fromXML(xml); return person; } /** * 测试javaObjectToXml方法 */ public static void testJavaObjectToXml(){ List<Address> addressList = new ArrayList<Address>(); Address address = new Address("郑州市经三路", "123456"); Address address2 = new Address("徐州市经三路", "1234"); addressList.add(address); addressList.add(address2); Person person = new Person(); person.setId(1); person.setName("zhangsan"); person.setSex("男"); person.setAddress(addressList); String str = javaObjectToXml(person); System.out.println(str); } /** * 测试XmlToJavaObject方法 */ public static void testXmlToJavaObject(){ String xml = "<Person><id>1</id><name>zhangsan</name><sex>男</sex><Address><add>郑州市经三路</add>" + "<zipcode>123456</zipcode></Address><Address><add>徐州市经三路</add><zipcode>1234</zipcode></Address></Person>"; Person person = xmlToJavaObject(xml); System.out.println(person.toString()); } public static void main(String[] args) { // testJavaObjectToXml(); //测试java对象转成Xml testXmlToJavaObject(); //测试XmlToJavaObject方法 } }
3. 使每个节点都加上<![CDATA[]]>
import java.io.Writer; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.core.util.QuickWriter; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; import com.thoughtworks.xstream.io.xml.XppDriver; public class XStreamCDATA { protected static String PREFIX_CDATA = "<![CDATA["; protected static String SUFFIX_CDATA = "]]>"; public static XStream initXStream() { XStream xstream = new XStream(new XppDriver() { public HierarchicalStreamWriter createWriter(Writer out) { return new PrettyPrintWriter(out) { // 对所有xml节点的转换都增加CDATA标记 boolean cdata = true; @SuppressWarnings("unchecked") public void startNode(String name, Class clazz) { super.startNode(name, clazz); } protected void writeText(QuickWriter writer, String text) { if (cdata) { writer.write(PREFIX_CDATA); writer.write(text); writer.write(SUFFIX_CDATA); } else { writer.write(text); } } }; } }); return xstream; } }
三、anotation操作
1、先创建User.java,Address.java类
User.java
package com.xu.xstream; import java.util.List; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamImplicit; @XStreamAlias("User") //别名 public class User { private int id; //@XStreamOmitField private String name; private String password; @XStreamImplicit //隐式集合 private List<Address> addressList; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public List<Address> getAddressList() { return addressList; } public void setAddressList(List<Address> addressList) { this.addressList = addressList; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", password=" + password + ", addressList=" + addressList + "]"; } }
Address.java
package com.xu.xstream; import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("Address") public class Address { private String add; private String zipcode; public Address() { } public Address(String add, String zipcode) { this.add = add; this.zipcode = zipcode; } public String getAdd() { return add; } public void setAdd(String add) { this.add = add; } public String getZipcode() { return zipcode; } public void setZipcode(String zipcode) { this.zipcode = zipcode; } @Override public String toString() { return "Address [add=" + add + ", zipcode=" + zipcode + "]"; } }
3、创建UserTest.java测试
package com.xu.xstream; import java.util.ArrayList; import java.util.List; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; public class UserTest { /** * 测试java对象转换XMl */ public static void testJavaObjectToXml(){ XStream xstream = new XStream(new DomDriver()); xstream.processAnnotations(User.class); User user = new User(); user.setId(1); user.setName("zhangsan"); user.setPassword("password"); List<Address> addressList = new ArrayList<Address>(); Address address = new Address("郑州市经三路", "123456"); Address address2 = new Address("徐州市经三路", "1234"); addressList.add(address); addressList.add(address2); user.setAddressList(addressList); System.out.println(xstream.toXML(user)); } /** * 测试XML转换成java对象 */ public static void testXmlToJavaObject(){ String xml = "<User><id>1</id><name>zhangsan</name><password>password</password>" + "<Address><add>郑州市经三路</add><zipcode>123456</zipcode>" + "</Address><Address><add>徐州市经三路</add><zipcode>1234</zipcode>" + "</Address></User>"; User user = null; XStream xstream = new XStream(new DomDriver()); xstream.processAnnotations(User.class); //注意这里前面是用别名,这里也要用别名,不然会报错找不到节点 user = (User)xstream.fromXML(xml); System.out.println(user.toString()); } public static void main(String[] args) { // testJavaObjectToXml(); //调用 测试java对象转换XMl方法 testXmlToJavaObject(); //调用 测试XML转换成java对象方法 } }
相关推荐
xstream详细用法,包括xml转换为bean及bean转换为xml
最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar ...
Xstream上次对CVE-2020-26217处理并不彻底,虽然通过黑名单方法阻止了远程代码执行,但是仍然可以采用类似思路实现文件删除与服务器请求伪造。 影响版本 Xstream 修复版本 Xstream > = 1.4.15 风险等级 严重
xstream最新版jar包
赠送jar包:xstream-1.4.11.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
XStream在运行时使用Java反射机制对要进行序列化的...XStream支持以方法调用的方式,或是Java 标注的方式指定别名。 XStream在进行数据类型转换时,使用系统缺省的类型转换器。同时,也支持用户自定义的类型转换器。
XStream组件进行Object与XML互转用法 1.所需求jar包: xstream-1.3.1.jar 2.如果仅进行OBJECT与XML之间互转只需要这一个jar 包及XStream这一个类就可又了 用法说明: 1.OBJECT 转XML //第一步:准备好要进行XML...
xstream-1.4.19.jar
xstream jar包,java对象转xml以及xml转java对象,操作很简单。
赠送jar包:xstream-1.4.7.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
xstream 1.2 ,xstream 1.2.2.jar xstream 1.2 ,xstream 1.2.2.jar
XStream解析XML实例
XStream DOC
xstream-1.4.7.jar XML
xstream xstream-1.4.5.jar
xstream-1.4.2.jar,官网上也有,由于本人分没了,希望有分的同志给点分。如果你也每份,请上官网下,地址:http://xstream.codehaus.org/download.html
XStream使用方法总结L-对象-转换.txt
xstream-1.4.2
xstream所需要的jar包,xstream-1.4.9.jar、dom4j-1.6.1.jar、xpp3_min-1.1.4c.jar等
多个类注解@XStreamAlias,value相同、且在集合上使用了@XStreamImplicit会出现异常: com.thoughtworks.xstream.converters.ConversionException: No field 'null' found in class '.....(注解的类路径)' ---- ...