Address类
package pojo;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
/**
* Address information.
*/
public class Address {
@XStreamAsAttribute()
private String street1;
@XStreamAsAttribute()
private String street2;
@XStreamAsAttribute()
private String city;
@XStreamAsAttribute()
private String state;
@XStreamAsAttribute()
private String postCode;
@XStreamAsAttribute()
private String country;
public Address(String street1, String street2, String city, String state, String postCode, String country) {
super();
this.street1 = street1;
this.street2 = street2;
this.city = city;
this.state = state;
this.postCode = postCode;
this.country = country;
}
public String getStreet1() {
return street1;
}
public void setStreet1(String street1) {
this.street1 = street1;
}
public String getStreet2() {
return street2;
}
public void setStreet2(String street2) {
this.street2 = street2;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getPostCode() {
return postCode;
}
public void setPostCode(String postCode) {
this.postCode = postCode;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Address [street1=" + street1 + ", street2=" + street2 + ", city=" + city + ", state=" + state
+ ", postCode=" + postCode + ", country=" + country + "]";
}
}
Student类
package pojo;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
//设置Student类在xml中的别名
@XStreamAlias("xmlstudent")
public class Student {
//设置address在xml中的别名
@XStreamAlias("xmladdress")
Address address;
//将name设置为XML Student 元素的 attribute
@XStreamAsAttribute()
String name;
@XStreamAsAttribute()
List<String> grade;
public Student(Address address, String name, List<String> grade) {
super();
this.address = address;
this.name = name;
this.grade = grade;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getGrade() {
return grade;
}
public void setGrade(List<String> grade) {
this.grade = grade;
}
@Override
public String toString() {
return "Student [address=" + address + ", name=" + name + ", grade=" + grade + "]";
}
}
主函数
package pojo;
import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.XStream;
public class Start {
public static void main(String[] args) {
String res = toXML();
toEntity(res);
}
public static void toEntity(String inputXML) {
XStream xs = new XStream();
xs.setMode(XStream.NO_REFERENCES);
// 注册使用了注解的VO
xs.processAnnotations(new Class[] { Student.class, Address.class });
Student person = (Student) xs.fromXML(inputXML);
System.out.println(person.toString());
}
public static String toXML() {
XStream xStream = new XStream();
Address address = new Address("stree1", "street2", "guangzhou", "stateOK", "12345", "CHINA");
List<String> list = new ArrayList<String>();
list.add("70");
list.add("80");
list.add("90");
Student s = new Student(address, "young", list);
xStream.setMode(XStream.NO_REFERENCES);
// 注册使用了注解的VO
xStream.processAnnotations(new Class[] { Student.class, Address.class });
String xml = xStream.toXML(s);
System.out.println(xml);
return xml;
}
}
测试结果如下:
<xmlstudent name="young">
<xmladdress street1="stree1" street2="street2" city="guangzhou" state="stateOK" postCode="12345" country="CHINA"/>
<grade>
<string>70</string>
<string>80</string>
<string>90</string>
</grade>
</xmlstudent>
Student [address=Address [street1=stree1, street2=street2, city=guangzhou, state=stateOK, postCode=12345, country=CHINA], name=young, grade=[70, 80, 90]]
//设置address在xml中的别名
@XStreamAlias("xmladdress")
Address address;
//将name设置为XML Student 元素的 attribute
@XStreamAsAttribute()
String name;
@XStreamImplicit()
List<String> grade;
<xmlstudent name="young">
<xmladdress street1="stree1" street2="street2" city="guangzhou" state="stateOK" postCode="12345" country="CHINA"/>
<string>70</string>
<string>80</string>
<string>90</string>
</xmlstudent>
Student [address=Address [street1=stree1, street2=street2, city=guangzhou, state=stateOK, postCode=12345, country=CHINA], name=young, grade=[70, 80, 90]]
其grade字段不会写到xml文件中