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>
分享到:
相关推荐
《XStream笔记——深入解析与应用》 XStream是一款强大的Java库,用于将对象序列化为XML,反之亦然。它的主要优点在于简洁的API和易于理解的转换过程,使得XML与Java对象之间的绑定变得非常直观。在本篇笔记中,...
《xStream完美转换XML、JSON》学习笔记 在IT领域,数据交换是常见的需求,而XML和JSON作为两种广泛使用的数据格式,它们之间的转换尤为重要。xStream是一个强大的Java库,它能够轻松地将Java对象序列化为XML或反...
例如,CXF支持多种数据绑定框架,如JAXB(Java Architecture for XML Binding)和XStream,这些工具可以帮助开发者在XML和Java对象之间进行无缝转换。 更具体的内容可能包括: 1. CXF的架构设计,包括服务端和...
### JBoss ESB 学习笔记知识点概览 #### 一、搭建ESB开发环境 - **工具准备**: - Eclipse-JEE 3.5:集成开发环境,支持Java EE标准,适合企业级应用程序开发。 - jbossesb-server-4.7:JBoss ESB的具体版本,为...
“文学文档”可能指的是使用Markdown或其他格式编写的文档,这些文档通常用于技术写作、笔记或者书籍撰写,它们可以轻松地转换为HTML、PDF或者其他格式。 “Java插件”是指在Java环境中运行的扩展模块,它们提供...
JQualityVis JQualityVis是用Java编写的软件质量分析框架,允许工程师在将静态软件指标的结果应用于已解析的源代码后,将其可视化。 哦,有光泽 看一下这个,或。 建立笔记 以下库必须在您的类...xstream-1.3.1.jar
#Bookman 只是一个小玩具应用程序...笔记 App使用根文件夹中的books.xml作为数据文件。 如果不存在,将创建它。 样本文件为books_sample.xml 去做 详细视图上的文字换行 切换到JAXB摆脱XStream依赖关系 添加排序和过滤