XStream
是一個Java
對象與XML
互相轉換的工具類庫。html
官網連接: http://x-stream.github.io/index.htmljava
下載頁面:http://x-stream.github.io/download.htmlgit
使用Maven
構建項目的加入如下依賴:github
<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.10</version> </dependency>
建立Bean
:web
public class User { private String userName; private String email; public User() {} public User(String userName, String email) { this.userName = userName; this.email = email; } public String toString() { return "User:{userName=" + this.userName + ",email=" + this.email + "}"; } //Getter and Setter... }
Java
對象轉XML
:使用xStream.toXML()
方法。工具
public static void main(String[] args) { User user = new User("lanweihong", "lwhhhp@gmail.com"); //建立解析XML對象 XStream xStream = new XStream(); //設置別名, 默認會輸出全路徑 xStream.alias("User", User.class); //轉爲xml String xml = xStream.toXML(user); System.out.println(xml); }
轉換後的xml
文本爲:this
<User> <userName>lanweihong</userName> <email>lwhhhp@gmail.com</email> </User>
XML
轉Java
對象使用xStream.fromXML()
方法。code
public static void main(String[] args) { XStream xStream = new XStream(); xStream.alias("User", User.class); String xml = "<User>\n" + " <userName>lanweihong</userName>\n" + " <email>lwhhhp@gmail.com</email>\n" + "</User>"; //轉對象 User user = (User)xStream.fromXML(xml); System.out.println(user.toString()); }
輸出文本爲:xml
User:{userName=lanweihong,email=lwhhhp@gmail.com}
最基本的註解@XStreamAlias
用於設置字段別名;咱們將上述例子建立的User
對象添加註解改造一下:htm
@XStreamAlias("user") public class User { @XStreamAlias("username") private String userName; @XStreamAlias("email") private String email; public User() {} public User(String userName, String email) { this.userName = userName; this.email = email; } public String toString() { return "User:{userName=" + this.userName + ",email=" + this.email + "}"; } //Getter and Setter... }
XStream
默認不會讀取這個註解,由於,咱們須要聲明XStream
的註解來源:
public static void main(String[] args) { User user = new User("lanweihong", "lwhhhp@gmail.com"); XStream xStream = new XStream(); //聲明XStream註解來源 xStream.processAnnotations(User.class); String xml = xStream.toXML(user); System.out.println(xml); }
輸出文本爲:
<user> <username>lanweihong</username> <email>lwhhhp@gmail.com</email> </user>
因而可知,生成的xml
節點名稱已經變爲咱們使用@XStreamAlias
註解的別名。
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; public class XmlUtils { /** * XML轉對象 * @param clazz 對象類 * @param str xml字符串 * @param <T> T * @return */ public static <T> T parseFromXml(Class<T> clazz, String xml) { //建立解析XML對象 XStream xStream = new XStream(new DomDriver()); //處理註解 xStream.processAnnotations(clazz); @SuppressWarnings("unchecked") //將XML字符串轉爲bean對象 T t = (T)xStream.fromXML(xml); return t; } /** * 對象轉xml * @param obj 對象 * @return */ public static String toXml(Object obj) { XStream xStream = new XStream(new DomDriver()); xStream.processAnnotations(obj.getClass()); return xStream.toXML(obj); } }