XStream使用

2024-05-27 06:44
文章标签 使用 xstream

本文主要是介绍XStream使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

官网地址 http://x-stream.github.io
官网教程地址 http://x-stream.github.io/alias-tutorial.html
XStream是一个简单的基于Java的类库,用来将Java对象序列化成XML(JSON) 或 反序列化为对象 (即:可以轻易的将Java对象和XML文档相互转换)。XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。

下载及依赖引入

官网下载
http://x-stream.github.io/download.html

上面下载地址网页中会有maven 引入版本

<dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.20</version>
</dependency>

使用

1、创建 XStream 对象

1XStream xStream = new XStream();
【注意】默认为Xpp3解析器,它是一个非常快速的 XML 拉取解析器实现。但是有依赖关系,
需要引入 xstream-[version].jar 和 xpp3-[version].jar xmlpull-[version].jar 在类路径中
或 
2XStream xstream = new XStream(new DomDriver());
【注意】使用标准的 JAXP DOM 解析器
或
3XStream xstream = new XStream(new StaxDriver());
【注意】从 Java 6 开始使用集成的 StAX 解析器,StaxDriver使用SAX解析器(可从Java6),一个快速的XML解析器。

2、java bean与xml 互转使用方法

序列化对象到 XML
// Object to XML Conversion
String xml = xstream.toXML(Person);反序列化 XML 获得对象
// XML to Object Conversion
Person person = (Person) xstream.fromXML(xml);

3、别名序列化映射关系使用

  • 类别名
XStream.alias(String name, Class type)
xstream.alias("student", Student.class);如果不使用类别名标签会显示为完整名称
使用前<com.org.Student> 使用后<student>
  • 类属性别名
XStream.aliasField(String alias, Class definedIn, String fieldName)
xstream.aliasField("name", Student.class, "studentName");使用前<studentName>==使用后 <name>
  • 类属性混叠(将类属性作为标签的属性而不是子标签)
xstream.useAttributeFor(Student.class, "studentName");使用前 <student><studentName>
使用后 <student studentName="xiaoxi">
  • 隐式集合(将使用的集合在 XML 无需显示集合节点,直接显示集合的子节点)数组或映射也可以声明为隐式
XStream.addImplicitCollection(Class ownerType, String fieldName)
xstream.addImplicitCollection(Student.class, "noteList");使用前<noteList><note></note><note></note></noteList>显示了noteList节点
使用后<note></note><note></note>,不显示noteList节点
用于解析没有根节点转换到list,同时将list在转换到没有根节点的多组节点
  • 包别名
xstream.aliasPackage("com.Student", "com.org.Student");使用后<com.org.Student>使用后<com.Student>
  • 转换器( 属性不能直接转换的,还可以使用转换器
    参考转换器使用)
    http://x-stream.github.io/converter-tutorial.html

序列化与反序列化中映射关系==使用方式

  • 类别名方式
    // 创建一个类的XML完全限定名称的别名xstream.alias("student", Student.class);xstream.alias("note", Note.class);// 使用的集合是表示在XML无需显示根xstream.addImplicitCollection(Student.class, "notes");// 成员变量作为XML属性xstream.useAttributeFor(Student.class, "studentName");// 用于创建以XML字段的别名xstream.aliasField("name", Student.class, "studentName");
  • 注解别名方式
@XStreamAlias("student")    //类别名
class Student {    @XStreamAlias("name")   //字段别名@XStreamAsAttribute     //同时设置字段为xml标签属性<student name="xiaoxi">,没有@XStreamAsAttribute就是xml的子标签private String studentName;@XStreamImplicit        //define list as an implicit collectionprivate List<Note> notes = new ArrayList<Note>();【关键】为了告诉 XStream 框架来处理注释,需要XML序列化之前添加下面的命令。xstream.processAnnotations(Student.class);或者xstream.autodetectAnnotations(true);XStream xstream = new XStream(new StaxDriver());
xstream.autodetectAnnotations(true);
反序列化 XML 获得对象
Person person = (Person) xstream.fromXML(xml);
序列化对象到 XML
String xml = xstream.toXML(Person);

这篇关于XStream使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1006732

相关文章

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

Spring Boot 中正确地在异步线程中使用 HttpServletRequest的方法

《SpringBoot中正确地在异步线程中使用HttpServletRequest的方法》文章讨论了在SpringBoot中如何在异步线程中正确使用HttpServletRequest的问题,... 目录前言一、问题的来源:为什么异步线程中无法访问 HttpServletRequest?1. 请求上下文与线

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分