Java -- XStreamAlias 处理节点中的属性和值
XStreamAlias 可以把objec和xml相互转换,但是有时候节点带有属性和值就需要特殊处理下:
<?xml version="1.0" encoding="UTF-8"?> <student><studentList><student_Message sid="1"><id>1</id><idType name="身份证">1</idType><idNo>1</idNo><name>张三</name> <gender name="男">1</gender> </student_Message><student_Message id="2"><id>2</id><idType name="护照">2</idType><idNo>2</idNo><name>李华</name> <gender name="女">2</gender> </student_Message></studentList> </student>
有时候需要生成或是解析上面这种XML。就需要用到XStream的其他属性
pom:需要使用到 xstream-1.4.8.jar
<dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.8</version> </dependency>
创建实体类
import com.thoughtworks.xstream.annotations.XStreamAlias; import java.util.List; /*** @author ceshi* @Title: StudentList* @ProjectName StudentList* @Description: TODO* @date 2018/7/1122:00*/ //定义最外节点属性 @XStreamAlias("student") public class StudentList {//根据XML生成student集合private List<Student> studentList;public List<Student> getStudentList() {return studentList;}public void setStudentList(List<Student> studentList) {this.studentList = studentList;} }
import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute;/*** @author ceshi* @Title: Student* @ProjectName ceshi* @Description: TODO* @date 2018/7/1121:54*/ //定义内部节点 @XStreamAlias("student_Message") public class Student {//定义<student_Message sid="1">属性 @XStreamAsAttribute()private String sid;private String id;private IdType idType;private String idNo;private String name;private Gender gender;public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public String getId() {return id;}public void setId(String id) {this.id = id;}public IdType getIdType() {return idType;}public void setIdType(IdType idType) {this.idType = idType;}public String getIdNo() {return idNo;}public void setIdNo(String idNo) {this.idNo = idNo;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Gender getGender() {return gender;}public void setGender(Gender gender) {this.gender = gender;} }
import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamConverter; import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;/*** @author ceshi* @Title: IdType* @ProjectName ceshi* @Description: TODO* @date 2018/7/1121:56*/ @XStreamAlias("MaxBenefitDurPeriod") @XStreamConverter(value = ToAttributedValueConverter.class, strings = { "value" }) public class IdType { 将name作为Cat属性输出在父节点 @XStreamAsAttribute()private String name;private String value;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getValue() {return value;}public void setValue(String value) {this.value = value;} }
import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamConverter; import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;/*** @author ceshi* @Title: Gender* @ProjectName ceshi* @Description: TODO* @date 2018/7/1121:58*/ @XStreamAlias("MaxBenefitDurPeriod") @XStreamConverter(value = ToAttributedValueConverter.class, strings = { "value" }) public class Gender {@XStreamAsAttribute()private String name;private String value;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getValue() {return value;}public void setValue(String value) {this.value = value;} }
工具类
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver;/*** @author ceshi* @Title: XStreamUtils* @ProjectName ceshi* @Description: TODO* @date 2018/7/1122:10*/ public class XStreamUtils{/*** 将Object转换为xml* @param obj 转换的bean* @return bean转换为xml*/public static String objectToXml(Object obj) {XStream xStream = new XStream();//xstream使用注解转换 xStream.processAnnotations(obj.getClass());return xStream.toXML(obj);}/*** 将xml转换为T* @param <T> 泛型* @param xml 要转换为T的xml* @param cls T对应的Class* @return xml转换为T*/public static <T> T xmlToObject(String xml, Class<T> cls){XStream xstream = new XStream(new DomDriver());//xstream使用注解转换 xstream.processAnnotations(cls);return (T) xstream.fromXML(xml);} }
测试类
import org.junit.Test; import java.util.ArrayList; import java.util.List;/*** @author ceshi* @Title: ceshi* @ProjectName ceshi* @Description: ceshiXStreamAlias* @date 2018/7/1121:53*/ public class JunitXStreamAlias {@Testpublic void test(){StudentList studentList = new StudentList();List<Student> list = new ArrayList<Student>();Student s = new Student();IdType i = new IdType();Gender g = new Gender();s.setSid("1");s.setId("1");i.setName("身份证");i.setValue("1");s.setIdType(i);s.setIdNo("1");s.setName("张三");g.setName("男");g.setValue("1");s.setGender(g);list.add(s);Student s1 = new Student();IdType i1 = new IdType();Gender g1 = new Gender();s1.setSid("2");s1.setId("2");i1.setName("护照");i1.setValue("2");s1.setIdType(i1);s1.setIdNo("2");s1.setName("李华");g1.setName("女");g1.setValue("2");s1.setGender(g1);list.add(s1);studentList.setStudentList(list);String xml = XStreamUtils.objectToXml(studentList);xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+xml;xml = xml.replaceAll("__","_");System.out.println(xml);
StudentList ss = XStreamUtils.xmlToObject(xml,StudentList.class); System.out.println(JSON.toJSON(ss));
} }
结果:
XStream使用总结:
XStreamAsAttribute 作用是将类内成员作为父节点属性输出,等同于xstream.useAttributeFor(Student.class, "sid")
XStreamAlias("cat") 等同于 xstream.alias("student_Message", Student.class);
XStreamConverter xstreamConvert用于指定class及Field的converter(转换方式)。
XStreamImplicit 注解使用当需要将collection或map类型的成员变量中数据转换成xml相同层次的元素时,可以在该成员变量使用该注解,会将添加注释的节点去掉 @XStreamImplicit(itemFieldName="studentList")
转载于:https://www.cnblogs.com/qinxu/p/9297099.html
Java -- XStreamAlias 处理节点中的属性和值相关推荐
- web.config forms节点中的属性的含义和用途
authentication mode="Forms"/> 这样之后,ASP.NET运行时就知道我们启用了Forms验证,在生命周期的验证阶段就激活FormsAuthenti ...
- 学习旧岛小程序 (5) observer 函数中修改属性的值
不要在一个属性的 observer 函数中修改属性的值 不然会造成内存泄露 错误代码: properties: {/* 期刊号 */index: {type: String,observer: fu ...
- stream筛选出集合中对象属性重复值
stream筛选出集合中对象属性重复值 字符串集合筛选 List<String> strings = Arrays.asList("a", "bb" ...
- 微信小程序this.setData修改对象中某个属性的值
前言 做过微信小程序的同学都知道,this.setData() 方法可以修改或者更新 data 中的值 .那不知道大家有没有遇到这么一种情况,我要修改对象中某个属性的值该怎么办呢?是不是第一想到的就是 ...
- 【干货】Java 判断一个对象中部分属性的值是否为空
Java中一个对象有多个属性,工作中需要对部分属性进行"非空判断".如果使用IFNULL会有大量的冗余代码,代码可读性查:如果对象新增删除了属性,判断代码需要重新进行硬编码,此违背 ...
- C# 遍历对象中的属性与值
开发中遇到需要使用对象的属性名称,现记录下来,以便以后使用 如,下面的用户对象类: public class user{public int id {get;set;}public string ni ...
- html中position属性默认值,CSS position 属性总结
CSS的position总是属性很容易让人弄混~ 为了仔细区别它们,所以今天总结一下CSS的position属性~ 下面是总结内容~ 有疏漏.错误之处敬请指出!o(^▽^)o 一.简介 定义:posi ...
- Java EE 7 Batch中传递属性/参数的2种方式
对于Java EE 7批处理工具,有两种将属性/参数传递给块和批处理的方法. 本快速指南向您展示了两种方式,在开发批处理Java EE 7方式时可能会经常使用它们. 1.运行前预定义的属性/参数 预定 ...
- java 获取集合对象中某个属性不为空的数据集合 lambda获取【拉姆达表达式 】
首先我创建了一个测试的类. 这个随意哈. public class Person {private String name;private String age;private Integer id; ...
最新文章
- 时间序列入门教程,从理论到业务实践,Kaggle kernels Master 整理分享
- 学习python好学吗-零基础学python难吗?好学吗?
- Python教程:多变量的灵活处理
- C++——《算法分析与设计》实验报告——单源最短路径问题
- 线段树动态开点区间加区间求和
- ASP.Net 使用SqlBulkCopy批量插入
- MFC+ODBC操作Access数据库pdf版
- 【白皮书分享】2021年智慧城市白皮书:依托智慧服务,共创新型智慧城市.pdf(附下载链接)
- 基于预训练深度学习算法的番茄作物病害分类
- 写给大忙人的维生素一览表【饮食健康规律】
- 彻底了解HASH算法及应用(一)
- Cockos REAPER for Mac(音轨录制编辑软件)
- WDS+MDT网络部署操作系统
- 程序员坐牢了,会被安排去写代码吗?
- Flutter之导航栏骨架实现
- 这10本豆瓣高分经典数学书,果断收藏!
- mach_absolute_time 高效计算时间差
- html鼠标移除事件监听,Javascript:DOM事件(监听鼠标点击/释放,鼠标悬停/离开等)...
- 高中英语解析(3500词汇)
- c#启动时窗口默认光标聚焦位置设置
热门文章
- SAP CRM PPR调试截图,头都搞大了,希望这问题这辈子只遇到这次
- PHP CLI应用的调试原理
- android apk自动安装包下载,Android实现应用下载并自动安装apk包
- matlab 随机数权重,MATLAB中加权随机数
- python numpy矩阵乘法_高维Python-Numpy矩阵乘法
- 打印字符串(C语言,全排列)
- 单词搜索Python解法
- ubuntu下mysql编码格式设置_Ubuntu 16.04.1下修改MySQL默认编码
- gis怎么通过水库划分子流域_ArcGIS提取小流域——以北京为例,提取出密云水库...
- python学习-异常(异常类型,异常处理、自定义异常)