`
想起要学好java
  • 浏览: 8767 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

XStream简介

    博客分类:
  • xml
 
阅读更多

用XStream可以很简单的将xml字符串和bean进行相互转换,具体代码如下。

先写一下XStreamFactory。用来对xml的字符进行处理。
public class XStreamFactory {
public static String PREFIX_CDATA = "<![CDATA[";
public static String SUFFIX_CDATA = "]]>";
/**
* 初始化XStream 可支持某一字段可以加入CDATA标签 如果需要某一字段使用原文
* 就需要在String类型的text的头加上"<![CDATA["和结尾处加上"]]>"标签, 以供XStream输出时进行识别
* @param isAddCDATA
* 是否支持CDATA标签
* @return
*/
public static XStream init(boolean isAddCDATA) {
XStream xstream = null;
if (isAddCDATA) {
xstream = new XStream(new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
protected void writeText(QuickWriter writer, String text) {
// 这里的意思就是如果xml串的每行标签里的内容有<![CDATA[和]]>,则将这两个去掉,而在需要组装返回给微信服务器的xml串时,如果每行标签里的内容没有<![CDATA[和]]>,则在前后加上这两个。
if (text.startsWith(PREFIX_CDATA)) {
text = text.replace(PREFIX_CDATA, "");
text = text.replace(SUFFIX_CDATA, "");
writer.write(text);
return;
}
if (!text.startsWith(PREFIX_CDATA)) {
text = PREFIX_CDATA + text + SUFFIX_CDATA;
}
writer.write(text);
}
};
};
});
} else {
xstream = new XStream();
}
return xstream;
}
}
如果需要对xml的字符进行处理,则需要在定义XStream里重写XppDriver的createWriter方法,就可以自定义xml的格式和处理字符内容。
微信服务器推送消息时发的xml串,每行的内容包括<![CDATA[开头和]]>结尾。上面的XStreamFactory就可以将每行内容里的<![CDATA[和]]>处理掉,同时返回到微信服务器的xml又可以加了<![CDATA[开头和]]>结尾。
下面介绍xml串和bean的简单互转。bean里面有对象属性
public class Address {
private String province;
private String city;
private String district;
public Address(String province, String city, String district) {
super();
this.province = province;
this.city = city;
this.district = district;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDistrict() {
return district;
}
public void setDistrict(String district) {
this.district = district;
}
@Override
public String toString() {
return "province = " + province + " city = " + city + " district = " + district;
}
}
具体的对象
public class User {
private String username;
private String email;
private Address address;
public User(String username, String email, Address address) {
super();
this.username = username;
this.email = email;
this.address = address;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "username = " + username + " email = " + email;
}
}
测试类:
public class TestXStream {
public static void main(String[] args) {
Address address1 = new Address("广东省", "深圳市", "南山区");
User user = new User("koko", "koko@sina.com", address1);
XStream xstream = XStreamFactory.init(false);
xstream.alias("user", User.class);
String xmlStr = xstream.toXML(user);
System.out.println(xmlStr);
System.out.println("-------------------------------------------");
User userBak = (User)xstream.fromXML(xmlStr);
System.out.println(userBak);
System.out.println(userBak.getAddress());
}
}
输出如下:
<user>
<username>koko</username>
<email>koko@sina.com</email>
<address>
<province>广东省</province>
<city>深圳市</city>
<district>南山区</district>
</address>
</user>
-------------------------------------------
username = koko email = koko@sina.com
province = 广东省 city = 深圳市 district = 南山区
 
如果bean里面是一个对象的集合,在转换成xml的时候加上xstream.alias("address", Address.class);其实这个xstream.alias();是加别名,只要转换时xml的标签里出现了的类的全路径,即需要加一个别名来控制。
public class User {
private String username;
private String email;
private List<Address> addressList;
public User(String username, String email, List<Address> addressList) {
super();
this.username = username;
this.email = email;
this.addressList = addressList;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public List<Address> getAddressList() {
return addressList;
}
public void setAddressList(List<Address> addressList) {
this.addressList = addressList;
}
@Override
public String toString() {
return "username = " + username + " email = " + email;
}
}
测试类:
public class TestXStream {
public static void main(String[] args) {
List<Address> lists = new ArrayList<>();
Address address1 = new Address("广东省", "深圳市", "南山区");
Address address2 = new Address("湖南省", "长沙市", "望城区");
lists.add(address1);
lists.add(address2);
User user = new User("koko", "koko@sina.com", lists);
XStream xstream = XStreamFactory.init(false);
xstream.alias("user", User.class);
xstream.alias("address", Address.class);
String xmlStr = xstream.toXML(user);
System.out.println(xmlStr);
System.out.println("-------------------------------------------");
User userBak = (User)xstream.fromXML(xmlStr);
System.out.println(userBak);
for(Address address : userBak.getAddressList()) {
System.out.println(address);
}
}
}
 
输出结果:
<user>
<username>koko</username>
<email>koko@sina.com</email>
<addressList>
<address>
<province>广东省</province>
<city>深圳市</city>
<district>南山区</district>
</address>
<address>
<province>湖南省</province>
<city>长沙市</city>
<district>望城区</district>
</address>
</addressList>
</user>
-------------------------------------------
username = koko email = koko@sina.com
province = 广东省 city = 深圳市 district = 南山区
province = 湖南省 city = 长沙市 district = 望城区
以上即为XStream相互转换xml字符串和bean,简单易用。
分享到:
评论

相关推荐

    Java用xStream拼接xml

    **xStream简介** xStream是一个开源的Java库,由Johannes Link创建。它提供了简洁、直观的API来处理XML,使得开发者可以轻松地在Java对象和XML之间进行转换。xStream的核心功能是基于对象关系映射(ORM)的概念,它...

    XStream简单应用实例

    **XStream简介** XStream是一款强大的Java库,用于将Java对象序列化为XML,反之亦然。它由Joe Walnes创建,提供了一种简洁而直观的方式来处理对象与XML之间的转换。XStream的核心理念是通过简单的API,使得XML绑定...

    xml解析及使用XStream实现javaBean与xml之间的转换

    2. **XStream简介** XStream是Java中一个强大的库,用于将Java对象序列化为XML,反之亦然。它提供了简单直观的API,使得JavaBean与XML之间的转换变得非常容易。 3. **XStream的使用步骤** - 引入依赖:在项目中...

    xstream教程资料.rar

    一、XStream简介 XStream由Johannes Link创建,它通过简单的API提供了高效的序列化和反序列化功能。XStream的亮点在于其自动映射Java对象到XML的能力,使得XML结构与Java对象的字段一一对应,无需编写复杂的转换代码...

    XStream解析各种数据格式

    #### 一、XStream简介 XStream 是一个简单高效的 Java 库,用于将 Java 对象序列化为 XML 文档,同时也支持从 XML 文档反序列化为 Java 对象。它提供了简洁的 API 来简化序列化过程,使开发者能够轻松地处理对象与 ...

    XStream解析XML实例

    XStream简介** XStream是一个开源库,由Joe Walnes创建,它提供了Java对象到XML和XML到Java对象的直接映射。它的主要优点是其简洁的API和易于理解的输出。XStream的核心理念是,如果你能打印一个对象,那么也应该能...

    使用XStream操作xml教程

    一、XStream简介 XStream是一个开源库,由Johannes Link开发,它允许开发者以一种声明性方式将Java对象序列化为XML,然后又可以从XML还原回对象。XStream的核心理念是通过简单的API,减少XML处理的复杂性。它提供了...

    Xstream使用说明

    #### 一、Xstream简介 Xstream是一种对象XML映射(Object/XML Mapping)技术,主要用于处理XML文件序列化的工作。通过Xstream可以轻松地将Java对象序列化为XML文档,或者将XML文档反序列化为Java对象。与传统的XML...

    利用XStream读写xml文件

    ### XStream简介与应用 XStream是一款开源的Java库,用于简化XML文件的序列化与反序列化过程。它的设计理念是将XML数据映射到Java对象模型,反之亦然,而无需复杂的配置或显式的映射规则。XStream支持广泛的Java...

    xstream-1.4.4

    一、XStream 简介 1. 序列化与反序列化:XStream 提供了两个核心方法 `toXML()` 和 `fromXML()`,分别用于将 Java 对象转换成 XML 字符串和从 XML 字符串还原 Java 对象。这种转换是基于类的结构自动完成的,无需...

    xstream 的高级用法,自定义输出结构

    ### 一、XStream简介 XStream的核心理念是通过简单的API将Java对象与XML进行映射。它的核心类`XStream`提供了`toXML()`和`fromXML()`方法,分别用于对象到XML的转换和XML到对象的还原。此外,XStream支持类型安全的...

    Xstream生成和解析xml.rar

    **一、Xstream简介** Xstream是Java社区中的一款开源库,由Johannes Link创建,它的设计目标是使XML序列化和反序列化变得简单直观。Xstream的核心理念是通过反射机制自动处理Java对象到XML的转换,同时支持自定义...

    xstream-1.3.1.jar.zip

    1. **XStream简介** XStream由Johannes Brodbeck开发,它的设计目标是提供一个易于使用且高效的XML序列化框架。它通过简单的API,使得XML和Java对象之间可以进行透明的转换。XStream不仅支持基本数据类型,还能够...

    我对xstream对xml的操作的一些记录,仅够参考!

    一、XStream简介 XStream由Johannes Link创建,是一个基于反射的库,它提供了简单且直观的方式来处理对象与XML之间的转换。它的核心优势在于其简洁的API设计,使得XML序列化和反序列化变得异常容易,尤其对于那些不...

    xstream学习文档及实例

    一、XStream 简介 XStream 能够将复杂的 Java 对象结构转换成易于读写的 XML 格式,同时也能将 XML 文档还原为对应的 Java 对象。这在数据持久化、网络通信和配置存储等领域有着广泛的应用。XStream 通过提供简单的...

    xStream_two_item

    1. **xStream简介**:解释xStream是什么,它的主要功能,以及为什么在Java开发中会使用它。 2. **安装和配置**:如何在Eclipse项目中添加xStream库,包括导入Maven或Gradle依赖。 3. **基本使用**:展示如何创建...

    XStream笔计rar.rar

    一、XStream简介 XStream由Joe Walnes开发,最初设计用于简化Java对象到XML的转换,同时提供反序列化功能,以便将XML数据恢复为原始对象。它通过使用Java反射机制来实现这一目标,无需手动编写XML映射代码。XStream...

    应用源码之Xstream(解决xml和对象转换问题).zip

    1. **Xstream简介** Xstream库由Joe Walnes创建,它提供了直观且简洁的方式来映射Java对象到XML,反之亦然。它的核心思想是通过简单的注解或者类路径来定义对象和XML之间的映射关系,避免了复杂的DOM或SAX解析器的...

    XStream使用方法总结-对象-转换.txt

    #### 一、XStream简介 XStream是一种简单高效的工具类库,用于实现Java对象与XML数据格式之间的转换。它通过反射机制来读取对象的信息,并将其转化为XML格式,反之亦然。XStream提供了丰富的API接口,使得开发者...

Global site tag (gtag.js) - Google Analytics