一、xstream中注解的用法请参考:https://blog.csdn.net/zhouzhiwengang/article/details/56679004;
二、需要准备的maven以依赖:
<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.7</version> </dependency>三、需要的实体类:
Person:
package com.sunzy.project.xml; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; @XStreamAlias("person") public class Person{ @XStreamAsAttribute private String version = "1.8"; @XStreamAsAttribute private String encode = "UTF-8"; @XStreamAlias("firstName") private String firstName; @XStreamAlias("lastName") private String lastName; @XStreamAlias("telphone") private PhoneNumber tel; @XStreamAlias("faxOne") private PhoneNumber fax; @XStreamAlias("friends") private Friend friend; @XStreamAlias("pets") private Pets pet; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public PhoneNumber getTel() { return tel; } public void setTel(PhoneNumber tel) { this.tel = tel; } public PhoneNumber getFax() { return fax; } public void setFax(PhoneNumber fax) { this.fax = fax; } public Friend getFriend() { return friend; } public void setFriend(Friend friend) { this.friend = friend; } public Pets getPet() { return pet; } public void setPet(Pets pet) { this.pet = pet; } }PhoneNumber:
package com.sunzy.project.xml; import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("phoneNumber") public class PhoneNumber { @XStreamAlias("code") private int code; @XStreamAlias("number") private String number; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } }Friend:
package com.sunzy.project.xml; import java.util.List; import com.thoughtworks.xstream.annotations.XStreamImplicit; public class Friend { @XStreamImplicit(itemFieldName = "name") private List<String> name; public List<String> getName() { return name; } public void setName(List<String> name) { this.name = name; } }Pets:
package com.sunzy.project.xml; import java.util.List; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamImplicit; @XStreamAlias("Pets") public class Pets { @XStreamImplicit private List<Animal> animalList; public List<Animal> getAnimalList() { return animalList; } public void setAnimalList(List<Animal> animalList) { this.animalList = animalList; } }Animal:
package com.sunzy.project.xml; import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("Animal") public class Animal { @XStreamAlias("name") private String name; @XStreamAlias("age") private int age; public Animal(String name,int age){ this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }四、准备的工具类:
XmlAndBeanUtil:
package com.sunzy.project.xml; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; public class XmlAndBeanUtil { public static final Logger log = Logger.getLogger(XmlAndBeanUtil.class); public static final XStream Xstream = new XStream(new DomDriver("UTF-8")); /** * 将obj转换成xml的字符串 * @param obj * @return str */ public static String beanToXmlStr(Object obj) { Xstream.processAnnotations(obj.getClass()); String xml = Xstream.toXML(obj); return xml; } /** * 将xml类型的字符串转换成cls类型的对�? * @param xmlStr * @param cls * @return cls类型的对�? */ public static <T> T xmlStrToBean(String xmlStr, Class<T> cls) { try { XStream xstream = new XStream(new DomDriver()); xstream.processAnnotations(cls); @SuppressWarnings("unchecked") T obj = (T) xstream.fromXML(xmlStr); return obj; } catch (Exception e) { e.printStackTrace(); return null; } } /** * bean转换成对应路径下的xml文件 * @param file 对应路径的xml地址 * @param obj �?要转换的对象 * @return true 转换成功 ;false 转换失败 * @throws IOException */ public static boolean beanToXmlFile(String filePath, Object obj) { try { File file = new File(filePath); Xstream.processAnnotations(obj.getClass()); String xml = Xstream.toXML(obj); FileUtils.write(file, xml, "utf-8"); log.info("Xml Create Success:" + file.getAbsolutePath()); return true; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); log.fatal("xml Io生成异常",e); return false; } } /** * 路径file对应的xml文件转换成obj * @param file * @param cls * @return * @throws IOException */ public static <T> T xmlToBeanFile(String filePath, Class<T> cls) { File file = new File(filePath); try { if (!file.exists()) return null; Xstream.processAnnotations(cls); @SuppressWarnings("unchecked") T t = (T) Xstream.fromXML(FileUtils.readFileToString(file, "UTF-8")); return t; } catch (Exception e) { e.printStackTrace(); log.fatal("io 获取异常,没有"+filePath+"文件",e); return null; } } }五、测试类:
package com.sunzy.project.xml; import java.util.ArrayList; import java.util.List; import org.junit.Test; import com.alibaba.fastjson.JSONObject; public class TestXmlAndBean { @Test public void testBeantoXmlStr(){ Person per=new Person(); per.setFirstName("chen"); per.setLastName("youlong"); PhoneNumber tel=new PhoneNumber(); tel.setCode(137280); tel.setNumber("137280968"); PhoneNumber fax=new PhoneNumber(); fax.setCode(20); fax.setNumber("020221327"); per.setTel(tel); per.setFax(fax); List<String> friendList=new ArrayList<String>(); friendList.add("A1"); friendList.add("A2"); friendList.add("A3"); Friend friend1=new Friend(); friend1.setName(friendList); per.setFriend(friend1); Animal dog=new Animal("Dolly",2); Animal cat=new Animal("Ketty",2); List<Animal> petList=new ArrayList<Animal>(); petList.add(dog); petList.add(cat); Pets pet=new Pets(); pet.setAnimalList(petList); per.setPet(pet); String perXml = XmlAndBeanUtil.beanToXmlStr(per); System.out.println(perXml); } @Test public void xmlStrToBean(){ String str = "<person version='1.8' encode='UTF-8'>" + "<firstName>chen</firstName>" + "<lastName>youlong</lastName>" + "<telphone>" + "<code>137280</code>" + "<number>137280968</number>" + "</telphone>" + "<faxOne>" + "<code>20</code>" + "<number>020221327</number>" + "</faxOne>" + "<friends>" + "<name>A1</name>" + "<name>A2</name>" + "<name>A3</name>" + "</friends>" + "<pets>" + "<animalList>" + "<name>Dolly</name>" + " <age>2</age>" + "</animalList>" + "<animalList>" + "<name>Ketty</name>" + "<age>2</age>" + "</animalList>" + "</pets>" + "</person>"; Person person = XmlAndBeanUtil.xmlStrToBean(str, Person.class); System.out.println(JSONObject.toJSONString(person.getPet().getAnimalList())); } @Test public void beanToXmlFile(){ Person per=new Person(); per.setFirstName("chen"); per.setLastName("youlong"); PhoneNumber tel=new PhoneNumber(); tel.setCode(137280); tel.setNumber("137280968"); PhoneNumber fax=new PhoneNumber(); fax.setCode(20); fax.setNumber("020221327"); per.setTel(tel); per.setFax(fax); List<String> friendList=new ArrayList<String>(); friendList.add("A1"); friendList.add("A2"); friendList.add("A3"); Friend friend1=new Friend(); friend1.setName(friendList); per.setFriend(friend1); Animal dog=new Animal("Dolly",2); Animal cat=new Animal("Ketty",2); List<Animal> petList=new ArrayList<Animal>(); petList.add(dog); petList.add(cat); Pets pet=new Pets(); pet.setAnimalList(petList); per.setPet(pet); boolean result = XmlAndBeanUtil.beanToXmlFile("D:\\test\\per.xml",per); System.out.println(result); } @Test public void testXmlToBean(){ Person per = XmlAndBeanUtil.xmlToBeanFile("D:\\test\\per.xml", Person.class); System.out.println(JSONObject.toJSONString(per)); } }