使用XStream实现xml与JavaBean之间的转换

来源:互联网 发布:js 禁用esc 编辑:程序博客网 时间:2024/05/17 22:53

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() */@Overridepublic 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;}@Overridepublic 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);// 注册使用了注解的VOxs.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);// 注册使用了注解的VOxStream.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]]



如果将Student类中的grade成员变量的注解变成@XStreamImplicit(),即:

//设置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文件中




0 0