天天看點

XStream入門:由xml生成java對象

注:本文的XStream的jar包是基于1.4的

1、提供要生成的java類:

首先提供一個要使用的java類,等以下我們會将一個xml生成為該類的一個執行個體(對象),這個類就是一個普通的類,要注意的是類上的注解:@XStreamAlias("userroot"),這樣的話XStream才會識别,userroot為xml中的根元素名稱。

package com.test.xstream;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("userroot")
public class User {

	private String id;
	
	private String username;
	
	private String address;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", address="
				+ address + "]";
	}
	
}
           

2、提供xml,并根據xml生成java對象。

此處使用的是dom4j來動态生成的xml,如果對dom4j不熟悉,我們也可以不使用dom4j,而是直接使用xml檔案來作為輸入。

package com.test.xstream;

import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;

import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class XMLToObject {

	/**
	 * 測試,輸出對象與xml
	 * 
	 * @param args
	 */
	public static void main(String[] args) {

		User user = createObjfromXML(createDocument(), User.class);
		System.out.println(user);

		outputXML(createDocument(), System.out);
	}

	/**
	 * 根據給定的document生成指定的對象
	 * 
	 * @param document
	 * @param clazz
	 * @return
	 */
	private static <T> T createObjfromXML(Document document, Class<T> clazz) {
		XStream xstream = new XStream(new DomDriver());
		// 要将xml解析為那個對象
		xstream.processAnnotations(clazz);
		// 1.2.2用法
		// Annotations.configureAliases(xstream, clazz);
		// 也可以接收一個InputStream來作為輸入
		//xstream.fromXML(input);
		return (T) xstream.fromXML(document.asXML());
	}

	/**
	 * 建立Document對象
	 * 
	 * @return
	 */
	private static Document createDocument() {
		DocumentFactory documentFactory = DocumentFactory.getInstance();
		Document document = documentFactory.createDocument();
		Element rootElement = document.addElement("userroot");
		rootElement.addElement("id").addText("A111").addAttribute("type", "11");
		rootElement.addElement("username").addText("wang");
		rootElement.addElement("address").addText("北京");

		return document;
	}

	/**
	 * 輸出XML
	 * 
	 * @param document
	 * @param stream
	 */
	private static void outputXML(Document document, PrintStream stream) {
		PrintWriter out = new PrintWriter(stream);
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter writer = new XMLWriter(out, format);
		try {
			writer.write(document);
			writer.flush();
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}