一定要对XStream的注解有一定的认识,最起码要知道每个注解是什么意思!!
代码实现:
1.创建java对象
1.1分别创建Book和Books对象
package com.xd.bean;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
//给Book起的别名,在xml中会生成<book>标签
@XStreamAlias("book")
public class Book {
private String name="";
private String author="";
//该标签的意思是price会作为book的一个属性出现在标签中,如<book price="108">
@XStreamAsAttribute
private String price="";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
package com.xd.bean;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("books")
public class Books {
//隐式标签,加上这个注解可以去掉book最外层的<list></list>标签
@XStreamImplicit
private List<Book> list;
public List<Book> getList() {
return list;
}
public void setList(List<Book> list) {
this.list = list;
}
}
2.创建测试类
package com.xd.Test;
import java.util.List;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.xd.bean.Book;
import com.xd.bean.Books;
public class test {
private static final String xmlString="<books><book price=\"108\"><name>Java编程思想</name><author>Bruce Eckel</author></book><book price=\"52\"><name>Effective Java</name><author>Joshua Bloch</author></book><book price=\"118\"><name>Java 7入门经典</name><author>Ivor Horton</author></book></books>";
public static String toXML(Object obj){
XStream xstream = new XStream(new DomDriver("utf-8"));
//识别obj中的注解
xstream.processAnnotations(obj.getClass());
//将obj对象转化为xml文件
return xstream.toXML(obj);
}
public static <T> T toBean(String xmlstr,Class<T> cls){
XStream xstream=new XStream(new DomDriver());
//识别cls中的注解
xstream.processAnnotations(cls);
//注解给编译器一条指令,告诉他被批注的某些元素代码保持静默
@SuppressWarnings("unchecked")
T t=(T) xstream.fromXML(xmlstr);
return t;
}
public static void main(String[] args) {
//将xmlstring解析
Books books=toBean(xmlString, Books.class);
List<Book> list=books.getList();
//将books中的值取出
for(Book book : list){
System.out.println("name="+book.getName()+ "\tauthor" +book.getAuthor()+ "\tprice=" +book.getPrice());
}
System.out.println(toXML(books));
}
}
3.测试结果