1. 程式人生 > >xstream解析xml字串和生成物件

xstream解析xml字串和生成物件

一 目錄


二 程式碼

1 Person.java

package 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;
	}
	
	
	

}
2 PhoneNumber.java
package 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;
	}
}
3 XstreamUtil.java
package 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;
	}

}
4 XStreamTest.java
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());

	}

}