使用Xstream须要引入xstream-1.4.jar和xpp3-1.1.4c.jar
import com.thoughtworks.xstream.XStream;
import com.hikvision.bms.main.Person;
/**
* 使用Xstream解析XML字符串
*/
public class XstreamDemo {
/**
* xml字符串解析为实体类对象
*/
public void str2Java() {
String str = "<person>"
+ "<name>Jack</name>"
+ "<age>11</age>"
+ "<sex>男</sex>"
+ "<telphone>110</telphone>"
+ "<lovers>parents</lovers>"
+ "<lovers>wife</lovers>"
+ "<friends>"
+ "<string>LiLei</string>"
+ "<string>LuXi</string>"
+ "</friends>"
+ "<roles>"
+ "<string>friend</string>"
+ "<string>father</string>"
+ "<string>doctor</string>" //注意string首字母必须小写
+ "</roles>"
+ "</person>";
XStream xStream = new XStream();
xStream.alias("person",Person.class);
xStream.alias("lovers",String.class); //private List<String> lovers;是string类型
xStream.addImplicitCollection(Person.class, "lovers");//隐式集合 隐藏lovers
Person person = (Person) xStream.fromXML(str);
outPutInfo(person);
}
/**
* 将XML文件解析成实体类对象
*/
public void str2JavaFormXML() {
XStream xStream = new XStream();
xStream.alias("person",Person.class);
xStream.alias("lovers",String.class); //private List<String> lovers;是string类型
xStream.addImplicitCollection(Person.class, "lovers");//隐式集合 隐藏lovers
Person person = (Person)xStream.fromXML(XstreamDemo.class.getResourceAsStream("person.xml"));
outPutInfo(person);
}
/**
* 实体类转换为xml字符串
*/
public void java2XmlStr() {
Person person = new Person();
person.setName("Lucy");
person.setAge(22);
person.setSex("女");
person.setTelphone("120");
XStream xStream = new XStream();
xStream.alias("Girl", Person.class);
String xmlStr = xStream.toXML(person);
System.out.println(xmlStr);
}
public void outPutInfo(Person person) {
System.out.println("name:" + person.getName());
System.out.println("sex:" + person.getSex());
System.out.println("telphone:" + person.getTelphone());
for (String lover : person.getLovers()) {
System.out.print(lover + " ");
}
System.out.println();
for (String friend : person.getFriends()) {
System.out.print(friend + " ");
}
System.out.println();
for (String role : person.getRoles()) {
System.out.print(role + " ");
}
}
/**
* XStream 的常用方法
* xstream.omitField(mytest.class, "name"); 定义某一个属性的值不进行xml序列化。
* xstream.alias("cat", Cat.class);
* xstream.aliasField("age", Cat.class, "mAge"); 对某一个类和类的属性进行别名定义。
* xstream.useAttributeFor(String.class); 对所有String类型的字段定义为属性tag显示
* xstream.useAttributeFor("name".String.class); 对所有String类型的字段名成为name 定义为属性tag显示
*/
public static void main(String[] args) {
XstreamDemo demo = new XstreamDemo();
//demo.str2Java();
//demo.java2XmlStr();
demo.str2JavaFormXML();
}
}
person.java
import java.util.List;
public class Person {
private String name;
private Integer age;
private String sex;
private String telphone;
private List<String> lovers;
private List<String> friends;
private String[] roles;
/**set和get方法,以下省略**/
}
XML文件 person.xml 放置位置跟XstreamDemo.class同一个目录
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>Jack</name>
<age>11</age>
<sex>男</sex>
<telphone>110</telphone>
<lovers>parents</lovers>
<lovers>wife</lovers>
<friends>
<string>LiLei</string>
<string>LuXi</string>
</friends>
<roles>
<string>friend</string>
<string>father</string>
<string>doctor</string>
</roles>
</person>