xstream解析xml字串和生成物件
阿新 • • 發佈:2018-12-25
一 目錄
二 程式碼
1 Person.java
2 PhoneNumber.javapackage com.jn.xstream.bean; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamImplicit; import com.thoughtworks.xstream.annotations.XStreamInclude; /** * 描述:人 * 作者:姜鵬 * 時間:20170911 * */ @XStreamAlias("person") public class Person { @XStreamAlias("firstname") private String firstname; @XStreamAlias("lastname") private String lastname; @XStreamAlias("phone") private PhoneNumber phone; @XStreamAlias("fax") private PhoneNumber fax; // @XStreamImplicit() // private List<PhoneNumber> para = new ArrayList<PhoneNumber>(); @XStreamImplicit() private Map<String,PhoneNumber> map = new HashMap<String,PhoneNumber>(); public Person(String firstname, String lastname) { this.firstname = firstname; this.lastname = lastname; } public Person() { } 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 getPhone() { return phone; } public void setPhone(PhoneNumber phone) { this.phone = phone; } public PhoneNumber getFax() { return fax; } public void setFax(PhoneNumber fax) { this.fax = fax; } public Map getMap() { return map; } public void setMap(Map map) { this.map = map; } }
3 XstreamUtil.javapackage com.jn.xstream.bean; import com.thoughtworks.xstream.annotations.XStreamAlias; /** * 描述:電話號碼 * 作者:姜鵬 * 時間:20170911 * */ @XStreamAlias("PhoneNumber") public class PhoneNumber { @XStreamAlias("code") private int code; @XStreamAlias("number") private String number; public PhoneNumber(int code, String number) { this.code = code; this.number = number; } public PhoneNumber() { } public void setCode(int code) { this.code = code; } public void setNumber(String number) { this.number = number; } public int getCode() { return code; } public String getNumber() { return number; } }
4 XStreamTest.javapackage com.jn.xstream.util; import com.thoughtworks.xstream.XStream; /** * 描述:xtream工具類 * 作者:姜鵬 * 時間:20170911 * */ public class XstreamUtil { /** * 將xml字串轉為物件 * */ public static Object xmlStr2Object(String xmlString,Class clazz) throws Exception{ if( clazz == null || xmlString == null || "".equals(xmlString.replace(" ", "")) ) return null; Object object = clazz.newInstance(); XStream xStream = new XStream(); String className = object.getClass().getName(); xStream.alias(className, clazz); xStream.processAnnotations(new Class[]{clazz}); xStream.setMode(XStream.NO_REFERENCES); //轉為物件 object = xStream.fromXML(xmlString); return object; } /** * 將物件轉為xml格式字串 * */ public static String object2XmlStr(Object obj) throws Exception{ if(obj==null) return null; XStream xStream = new XStream(); String xml = xStream.toXML(obj); return xml; } }
package com.jn.xstream.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.jn.xstream.bean.Person;
import com.jn.xstream.bean.PhoneNumber;
import com.jn.xstream.util.XstreamUtil;
import com.thoughtworks.xstream.XStream;
/**
* 描述:xstream測試
* 作者:姜鵬
* 時間:20170911
* */
public class XStreamTest {
public static void test2() throws Exception{
// 拼接字串
StringBuffer sb = new StringBuffer();
sb.append("<person>");
sb.append(" <firstname>Joe</firstname>");
sb.append(" <lastname>Walnes</lastname>");
sb.append(" <phone>");
sb.append(" <code>123</code>");
sb.append(" <number>1234-456</number>");
sb.append(" </phone>");
sb.append(" <fax>");
sb.append(" <code>123</code>");
sb.append(" <number>9999-999</number>");
sb.append(" </fax>");
sb.append("</person>");
String xml = sb.toString();
Person person = (Person) XstreamUtil.xmlStr2Object(xml, Person.class);
System.out.println("person2 = "+person);
}
public static void test3() throws Exception{
Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));
PhoneNumber phoneNumber1 = new PhoneNumber(123, "1234-456");
PhoneNumber phoneNumber2 = new PhoneNumber(123, "1234-456");
joe.getMap().put("phoneNumber1", phoneNumber1);
joe.getMap().put("phoneNumber2", phoneNumber2);
String result = XstreamUtil.object2XmlStr(joe);
System.out.println("result = "+result);
}
public static void test1(){
// 拼接字串
StringBuffer sb = new StringBuffer();
sb.append("<person>");
sb.append(" <firstname>Joe</firstname>");
sb.append(" <lastname>Walnes</lastname>");
sb.append(" <phone>");
sb.append(" <code>123</code>");
sb.append(" <number>1234-456</number>");
sb.append(" </phone>");
sb.append(" <fax>");
sb.append(" <code>123</code>");
sb.append(" <number>9999-999</number>");
sb.append(" </fax>");
sb.append("</person>");
String xml = sb.toString();
// 構造XStream
XStream xStream = new XStream();
Person person = new Person();
xStream.alias("person", Person.class);
xStream.processAnnotations(new Class[]{Person.class});
xStream.setMode(XStream.NO_REFERENCES);
//轉為物件
person = (Person)xStream.fromXML(xml);
System.out.println("person = "+person);
}
public static void main(String[] args) throws Exception {
test3();
// String filePath = "D:"+File.separator+"test"+File.separator+"xstream"+File.separator+"test.xml";
// // Initializing XStream
// XStream xStream = new XStream();
// xStream.alias("person", Person.class);
// xStream.alias("personnumber", PhoneNumber.class);
////
//// // Serializing an object to XML
//// Person joe = new Person("Joe", "Walnes");
//// joe.setPhone(new PhoneNumber(123, "1234-456"));
//// joe.setFax(new PhoneNumber(123, "9999-999"));
//// FileOutputStream fileOutputStream = new FileOutputStream(new File(
//// filePath));
//// xStream.toXML(joe, fileOutputStream);
////
//// // Deserializing an object back from XM
//// XStream xStream2 = new XStream();
//
// FileInputStream fileInputStream = new FileInputStream(new File(
// filePath));
// Person person = (Person) xStream.fromXML(fileInputStream);
// System.out.println(person.toString());
}
}