使用 Xstream 可以幫助我們完成繁瑣的 xml 和 JavaBean 之間的轉換。
gradle 依賴:
compile 'com.thoughtworks.xstream:xstream:1.4.8'
compile 'dom4j:dom4j:1.6.1'
首先來看一個非常簡單的例子:
例1:
@Test
public void test01(){
// 1、建立 XStream 對象
XStream xStream = new XStream();
// 2、設定别名(預設使用的是包名,可以使用 alias 将包名改寫成指定的名字)
xStream.alias("person",Person.class);
// 3、建立對象
Person p = new Person("liwei","123456",28,14.19);
// 4、轉換成 xml
String xml = xStream.toXML(p);
System.out.println(xml);
}
輸出結果:
<person>
<username>liwei</username>
<password>123456</password>
<age>28</age>
<price>14.19</price>
</person>
例2:
/**
* 更改其中的屬性名稱
*/
@Test
public void test02(){
// 1、建立 XStream 對象
XStream xStream = new XStream();
// 2、設定别名(預設使用的是包名,可以使用 alias 将包名改寫成指定的名字)
xStream.alias("person",Person.class);
// 改屬性名,類的屬性名是 username,生成的 xml 子節點名字改成 nickname(一般不用)
xStream.aliasField("nickname",Person.class,"username");
// 3、建立對象
Person p = new Person("liwei","123456",28,14.19);
// 4、轉換成 xml
String xml = xStream.toXML(p);
System.out.println(xml);
}
<person>
<nickname>liwei</nickname>
<password>123456</password>
<age>28</age>
<price>14.19</price>
</person>
例3:
/**
* 把某個子節點改成屬性名
* 把 password 屬性輸出的時候從 xml 子節點變成 xml 屬性
*/
@Test
public void test03(){
// 1、建立 XStream 對象
XStream xStream = new XStream();
// 2、設定别名(預設使用的是包名,可以使用 alias 将包名改寫成指定的名字)
xStream.alias("person",Person.class);
// 改屬性名,類的屬性名是 username,生成的 xml 子節點名字改成 nickname(一般不用)
xStream.aliasField("nickname",Person.class,"username");
xStream.useAttributeFor(Person.class,"password");
// 3、建立對象
Person p = new Person("liwei","123456",28,14.19);
// 4、轉換成 xml
String xml = xStream.toXML(p);
System.out.println(xml);
}
<person password="123456">
<nickname>liwei</nickname>
<age>28</age>
<price>14.19</price>
</person>
例4:
@Test
public void test04(){
XStream xStream = new XStream();
xStream.alias("person",Person.class);
xStream.alias("persons",List.class);
List<Person> personList = new ArrayList<>();
Person p1 = new Person("liwei","123456",28,14.19,new Group(1,"研發部"));
Person p2 = new Person("zhouguang","666666",28,25.26,new Group(2,"交通大學"));
Person p3 = new Person("huzhenyu","88888",23,16.18,new Group(3,"系統工程"));
Person p4 = new Person("wudi","9999",25,18.14,new Group(4,"自營公司"));
personList.add(p1);
personList.add(p2);
personList.add(p3);
personList.add(p4);
String xml = xStream.toXML(personList);
System.out.println(xml);
}
例5:
/**
* 須要牢牢記住一點,xml 一定要有根節點,并且隻能有一個根節點
*/
@Test
public void test05(){
XStream xStream = new XStream();
xStream.alias("person",Person.class);
xStream.alias("persons",List.class);
// xStream.addImplicitCollection(Person.class,"List");
List<Person> personList = new ArrayList<>();
Person p1 = new Person("liwei","123456",28,14.19,new Group(1,"研發部"));
Person p2 = new Person("zhouguang","666666",28,25.26,new Group(2,"交通大學"));
Person p3 = new Person("huzhenyu","88888",23,16.18,new Group(3,"系統工程"));
Person p4 = new Person("wudi","9999",25,18.14,new Group(4,"自營公司"));
personList.add(p1);
personList.add(p2);
personList.add(p3);
personList.add(p4);
String xml = xStream.toXML(personList);
System.out.println(xml);
}
例6:
@Test
public void test06(){
XStream xStream = new XStream();
xStream.alias("group",Group.class);
xStream.alias("person",Person.class);
xStream.addImplicitCollection(Group.class,"personList");
Group group = new Group(1,"研發部");
Person p1 = new Person("liwei","123456",28,14.19,new Group(1,"研發部"));
Person p2 = new Person("zhouguang","666666",28,25.26,new Group(2,"交通大學"));
Person p3 = new Person("huzhenyu","88888",23,16.18,new Group(3,"系統工程"));
Person p4 = new Person("wudi","9999",25,18.14,new Group(4,"自營公司"));
group.addPerson(p1);
group.addPerson(p2);
group.addPerson(p3);
group.addPerson(p4);
String xml = xStream.toXML(group);
System.out.println(xml);
}
<group>
<id>1</id>
<name>研發部</name>
<person>
<username>liwei</username>
<password>123456</password>
<age>28</age>
<price>14.19</price>
<group>
<id>1</id>
<name>研發部</name>
</group>
</person>
<person>
<username>zhouguang</username>
<password>666666</password>
<age>28</age>
<price>25.26</price>
<group>
<id>2</id>
<name>交通大學</name>
</group>
</person>
<person>
<username>huzhenyu</username>
<password>88888</password>
<age>23</age>
<price>16.18</price>
<group>
<id>3</id>
<name>系統工程</name>
</group>
</person>
<person>
<username>wudi</username>
<password>9999</password>
<age>25</age>
<price>18.14</price>
<group>
<id>4</id>
<name>自營公司</name>
</group>
</person>
</group>
/**
* 把 XML 檔案片段轉換成 對象
*/
@Test
public void test07(){
XStream xStream = new XStream();
xStream.alias("person",Person.class);
String xml = "<person><username>liwei</username><password>123456</password></person>";
Person person = (Person) xStream.fromXML(xml);
System.out.println(person.getUsername());
System.out.println(person.getPassword());
}
@Test
public void test08(){
XStream xStream = new XStream();
xStream.alias("persons",List.class);
xStream.alias("person",Person.class);
List<Person> personList =
(List<Person>)xStream.fromXML(XstreamTest.class.getClassLoader().getResourceAsStream("user.xml"));
for(Person person:personList){
System.out.println(person);
}
}