XStream笔记

XStream直接使用流的形式读取XML,并且使用现有的XML解析框架,如DOM等,对XML进行解析后,生成JAVA对象。
默认解析器支持对普通对象的解析,如String ,Date,Collections等,如果需要解析特殊的对象,可以对其Converter接口进行扩展。
详细看XStream官方网站http://xstream.codehaus.org/architecture.html。

例子:


public class User {

String name;
String age;
Address address;

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 String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}
}


public class Address {

String code;
String street;

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getStreet() {
return street;
}

public void setStreet(String street) {
this.street = street;
}

}



    public class XstreamTest {

XStream xstream;

public void test() {
// xstream = new XStream(); // XML转对象时报错 Exception in thread "main" java.lang.IllegalArgumentException: XPP3
// pull parser library not present. Specify another driver. For example: new
// XStream(new DomDriver())
xstream = new XStream(new DomDriver());
xstream.alias("User", User.class);
xstream.alias("Address", Address.class);
}

public void objToXml() {
User user = new User();
user.setName("yaoming");
user.setAge("30");
Address address = new Address();
address.setCode("011101");
address.setStreet("new york");
user.setAddress(address);
System.out.println(xstream.toXML(user));
}

public void xmlToObj() {
StringBuffer buffer = new StringBuffer();
buffer.append("<User>");
buffer.append("<name>Tracy McGrady</name>");
buffer.append("<age>29</age>");
buffer.append("<address>");
buffer.append("<code>011101</code>");
buffer.append("<street>new york</street>");
buffer.append("</address>");
buffer.append("</User>");
User user = (User) xstream.fromXML(buffer.toString());
System.out.println(user.getName());
}

public static void main(String... strings) {
XstreamTest test = new XstreamTest();
test.test();
test.objToXml();
test.xmlToObj();
}
}


以上是最基本的例子;


xstream还有其他实用的方法,如不想展现某Collection类型的tag或者忽略掉它,可以使用addImplicitCollection(),本例子里没有用到Collection对象,就不举例子了。还有其他的用法,可以参考API。

使用Converter接口来实现对非普通对象的解析

  public class Child {

String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}


修改方法:

 public void objToXml() {
User user = new User();
user.setName("yaoming");
user.setAge("30");
Address address = new Address();
address.setCode("011101");
address.setStreet("new york");
user.setAddress(address);
Child child = new Child();
child.setName("baobao");
user.setChild(child);
xstream.registerConverter(new ChildValueConverter());
System.out.println(xstream.toXML(user));
}


输出:
   <User>
<name>yaoming</name>
<age>30</age>
<address>
<code>011101</code>
<street>new york</street>
</address>
<child>baobao</child>
</User>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值