xstream不映射字段_xstream 映射

场景:运用XStream来映射xml中列表元素到java对象

使用XStream来映射xml中列表元素到java对象

网上很多讲述使用XStream来映射xml文件到java对象的文章,但是几乎没有一篇文章讲述,如何使用XStream来映射xml中的同级的列表元素到java对象的文章。本文示例中将使用XStream 1.3.1。请去XStream的官方站点上下载相应的包。

在Eclipse中新建一个Java Project,然后引入XStream的包:xstream-1.3.1.jar和xpp3-min-1.1.4c.jar。在这里使用xpp的xml解析技术来解析xml,而不是传统的DOM或者sax来进行xml的解析。

在src下新建sample.xml文件。代码如下:

新建House类来映射house元素,House类的源代码如下:

public class House {

private String name = "";

private String address = "";

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

}

新建Wife类来映射wife标签,源代码如下:

public class Wife {

private String name = "";

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

新建Person类来映射person元素,源代码如下:

import java.util.List;

public class Person {

private int id;

private String name;

private Wife wife;

private List houseList;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Wife getWife() {

return wife;

}

public void setWife(Wife wife) {

this.wife = wife;

}

public List getHouseList() {

return houseList;

}

public void setHouseList(List houseList) {

this.houseList = houseList;

}

}

新建TestMain方法,包含main方法。首先,构建XStream的实例:

XStream xstream = new XStream();

然后,就是配置xml文件和java对象之间的映射,源代码如下:

xstream.alias("person", Person.class);

xstream.aliasAttribute(Person.class, "id", "id");

xstream.aliasAttribute(Person.class, "name", "name");

xstream.alias("wife", Wife.class);

xstream.aliasAttribute(Wife.class, "name", "name");

xstream.addImplicitCollection(Person.class, "houseList");

xstream.alias("house", House.class);

xstream.aliasAttribute(House.class,"name", "name");

xstream.aliasAttribute(House.class, "address", "address");

注意代码中的这句“xstream.addImplicitCollection(Person.class, "houseList");”,如果不加,xml配置文件的house元素将作为houselist的子元素。将变成

最后,使用XStream.fromXML来将对应的xml转化成java对象。代码如下:

Person person = (Person)xstream.fromXML(TestMain.class.getClassLoader()

.getResourceAsStream("sample.xml"));

由于sample.xml文件位于classpath下,所以使用了ClassLoader来加载sample.xml。

测试代码如下:

System.out.println("[person.name=" + person.getName() + "]");

System.out.println("[wife.name=" + person.getWife().getName() + ", wife.age=" + person.getWife().getAge() + "]");

System.out.println("[person.houseList.size=" + person.getHouseList().size() + "]");

System.out.println("[person.houseList.house1.name=" + person.getHouseList().get(0).getName() + ",address=" + person.getHouseList().get(0).getAddress() +"]");

测试结果如下:

[person.name=sample]

[wife.name=wife_name, wife.age=0]

[person.houseList.size=4]

person.houseList.house1.name=house1,address=address1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值