以下面的xml文件展开讨论。
<blog author="Guilherme Silveira">
<entry>
<title>first</title>
<description>My first blog entry.</description>
</entry>
<entry>
<title>tutorial</title>
<description>
Today we have developed a nice alias tutorial. Tell your friends! NOW!
</description>
</entry>
</blog>
1 首先定义结果几个model
- Blog 对象包含一个Author对象和多个Author 对象
public class Blog {
private Author writer;
private List entries=new ArrayList();
public void add(Entry ){
entries.add(entry);
}
public List getContent(){
return entries;
}
public Blog(Author writer){
this.writer=writer;
}
}
public class Author {
private String name;
public Author(String name) {
this.name = name;
}
public String getName(){
return name;
}
}
- Entry对象包含了title,description两个属性
public class Entry {
private String title,description;
public Entry(String title, String description) {
this.title = title;
this.description = description;
}
}
2 写一个简单的测试方法
/**
* @param args
*/
public static void main(String[] args) {
Blog teamBlog=new Blog(new Author("hjn"));
teamBlog.add(new Entry("first","My first blog entry"));
teamBlog.add(new Entry("tutorial","Today we have developed a nice alias tutorial"));
XStream stream=new XStream();
String strXml=stream.toXML(teamBlog);
System.out.println(strXml);
}
看看运行的结果:
<org.utmost.util.xml.Blog>
<writer>
<name>hjn</name>
</writer>
<entries>
<org.utmost.util.xml.Entry>
<title>first</title>
<description>My first blog entry</description>
</org.utmost.util.xml.Entry>
<org.utmost.util.xml.Entry>
<title>tutorial</title>
<description>Today we have developed a nice alias tutorial</description>
</org.utmost.util.xml.Entry>
</entries>
</org.utmost.util.xml.Blog>
生成的xml文件跟我们设想的错的太远了。
问题一:修改类的名字
stream.alias("blog", Blog.class);
stream.alias("entry", Entry.class);
再次运行看看结果
<blog>
<writer>
<name>hjn</name>
</writer>
<entries>
<entry>
<title>first</title>
<description>My first blog entry</description>
</entry>
<entry>
<title>tutorial</title>
<description>Today we have developed a nice alias tutorial</description>
</entry>
</entries>
</blog>
问题二:修改字段的别名:把writer改为author
stream.aliasField("author", Blog.class, "writer");
现在生成的xml如下:
<blog>
<author>
<name>hjn</name>
</author>
<entries>
<entry>
<title>first</title>
<description>My first blog entry</description>
</entry>
<entry>
<title>tutorial</title>
<description>Today we have developed a nice alias tutorial</description>
</entry>
</entries>
</blog>
上面的xml与我们想要的xml快一致了。
问题三:忽略entries标签
stream.addImplicitCollection(Blog.class, "entries");
这样的结果才是我想要的
<blog>
<author>
<name>hjn</name>
</author>
<entry>
<title>first</title>
<description>My first blog entry</description>
</entry>
<entry>
<title>tutorial</title>
<description>Today we have developed a nice alias tutorial</description>
</entry>
</blog>
问题四:修改属性的别名,把author做为blog 的一个属性。
stream.useAttributeFor(Blog.class, "writer");
stream.aliasField("author", Blog.class, "writer");
此时又产生了一个新的问题,xstream是不知道怎么把author转化为字符串作为xml的一个属性的。
为了解决这个问题,必须重写SingleValueConverter 方法。
package org.utmost.util.xml;
import com.thoughtworks.xstream.converters.SingleValueConverter;
public class AuthorConverter implements SingleValueConverter{
@Override
public Object fromString(String name) {
return new Author(name);
}
@Override
public String toString(Object obj) {
return ((Author)obj).getName();
}
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(Author.class);
}
}
在测试方法中添加
stream.registerConverter(new AuthorConverter());
ok,来看看效果
<blog author="hjn">
<entry>
<title>first</title>
<description>My first blog entry</description>
</entry>
<entry>
<title>tutorial</title>
<description>Today we have developed a nice alias tutorial</description>
</entry>
</blog>
修改报名方法是
stream.aliasPackage(name, pkgName);
总结:
通过本篇学习我们知道了
- 修改包的别名
- 修改类的别名
- 修改字段的别名
- 把一个类作为一个属性
第四点得重写SingleValueConverter类的一些方法,在下一篇中我将重点介绍Converter
分享到:
相关推荐
在本学习文档中,我们将深入探讨 XStream 的核心概念、用法以及如何在实际项目中应用。 一、XStream 简介 XStream 能够将复杂的 Java 对象结构转换成易于读写的 XML 格式,同时也能将 XML 文档还原为对应的 Java ...
《xStream完美转换XML、JSON》学习笔记 在IT领域,数据交换是常见的需求,而XML和JSON作为两种广泛使用的数据格式,它们之间的转换尤为重要。xStream是一个强大的Java库,它能够轻松地将Java对象序列化为XML或反...
最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar ...
XStream 反序列化漏洞(CVE-2020-26258 & 26259),修复jar包 xstream-1.4.15.jar Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发...
2. **自动映射**:XStream能够自动将Java类的字段映射到XML元素,无需额外的注解或配置。 3. **安全性**:XStream提供了安全模式,防止恶意的XML输入导致的安全漏洞,如XML注入攻击。 4. **自定义转换**:对于复杂...
xstream最新版jar包
**XStream 概述** XStream 是一个 Java 库,用于将对象序列化为 XML,以及从 XML 反序列化回对象。它提供了一种简单而直观的...通过深入学习和实践,我们可以充分利用 XStream 的优点,提高代码的可读性和可维护性。
Oracle Database XStream Guide 11g Release 2 (11.2)-302 Oracle Database XStream 是 Oracle 公司推出的一个数据捕获和事件处理工具,旨在帮助用户实时捕获和处理数据库中的数据变化。下面是 Oracle Database ...
2. 启用 `autodetectAnnotations` 功能,让 XStream 自动处理注解以限制反序列化的类。 3. 使用安全的序列化库,如 Jackson 或 Google's Protobuf,它们提供了更好的安全防护机制。 4. 对所有传入的序列化数据进行...
XStream库提供了一个简单、直观的方式来实现这种转换,使得XML序列化和反序列化变得非常方便。本篇将详细介绍XStream如何处理XML与Java对象的相互转换,以及如何处理List、Map等集合类型的数据。 首先,XStream是一...
xstream xstream-1.4.5.jar
2. 自定义转换器:如果默认的自动映射不能满足需求,用户可以通过自定义转换器来控制特定类的XML表示方式。 3. 安全性增强:XStream 1.3.1版本对安全性进行了改进,可以防止恶意代码注入攻击,这在处理不受信任的...
这篇博客文章,标题为“xStream学习xml,JASON,JAVA对象转换”,显然会探讨如何利用XStream来处理这两种数据格式。 XStream的核心功能在于其简单易用的API,可以将Java对象直接序列化成XML或JSON字符串,同时也能...
2. **dom4j-1.6.1.jar**:DOM4J是一个流行的Java XML API,它提供了一套全面而强大的处理XML、XPath和DOM的工具。XStream使用DOM4J作为其默认的DOM提供商,用于解析和构建XML文档。 3. **xpp3_min-1.1.4c.jar**:这...
xstream-1.4.19.jar
当需要将数据转换为XML格式以便于传输或处理时,工具如xStream就显得尤为重要。Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream...
《XStream解析依赖包详解》 在Java开发中,数据序列化是一个不可或缺的环节,它使得对象的状态可以被保存和恢复。XStream是一款强大的Java库,用于将Java对象转换为XML,反之亦然,极大地简化了序列化和反序列化的...
二、XStream的安装与配置 在Java项目中引入XStream库,通常通过Maven或Gradle进行依赖管理。配置完成后,可以通过`com.thoughtworks.xstream.XStream`类实例化对象,开始进行对象到XML或XML到对象的转换。 三、...
2. **类型安全**:XStream支持类型安全的转换,确保在反序列化时能正确地恢复原来的对象类型,避免了类型转换异常。 3. **自定义转换器**:对于复杂的对象结构或者特殊类型的转换,可以通过实现`Converter`接口来自...
xstream-1.4.20.jar