注:本文的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();
}
}
}