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")

posted on 2018-07-11 22:44 【cosmo】 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/qinxu/p/9297099.html

Java -- XStreamAlias 处理节点中的属性和值相关推荐

  1. web.config forms节点中的属性的含义和用途

    authentication mode="Forms"/> 这样之后,ASP.NET运行时就知道我们启用了Forms验证,在生命周期的验证阶段就激活FormsAuthenti ...

  2. 学习旧岛小程序 (5) observer 函数中修改属性的值

    不要在一个属性的 observer  函数中修改属性的值 不然会造成内存泄露 错误代码: properties: {/* 期刊号 */index: {type: String,observer: fu ...

  3. stream筛选出集合中对象属性重复值

    stream筛选出集合中对象属性重复值 字符串集合筛选 List<String> strings = Arrays.asList("a", "bb" ...

  4. 微信小程序this.setData修改对象中某个属性的值

    前言 做过微信小程序的同学都知道,this.setData() 方法可以修改或者更新 data 中的值 .那不知道大家有没有遇到这么一种情况,我要修改对象中某个属性的值该怎么办呢?是不是第一想到的就是 ...

  5. 【干货】Java 判断一个对象中部分属性的值是否为空

    Java中一个对象有多个属性,工作中需要对部分属性进行"非空判断".如果使用IFNULL会有大量的冗余代码,代码可读性查:如果对象新增删除了属性,判断代码需要重新进行硬编码,此违背 ...

  6. C# 遍历对象中的属性与值

    开发中遇到需要使用对象的属性名称,现记录下来,以便以后使用 如,下面的用户对象类: public class user{public int id {get;set;}public string ni ...

  7. html中position属性默认值,CSS position 属性总结

    CSS的position总是属性很容易让人弄混~ 为了仔细区别它们,所以今天总结一下CSS的position属性~ 下面是总结内容~ 有疏漏.错误之处敬请指出!o(^▽^)o 一.简介 定义:posi ...

  8. Java EE 7 Batch中传递属性/参数的2种方式

    对于Java EE 7批处理工具,有两种将属性/参数传递给块和批处理的方法. 本快速指南向您展示了两种方式,在开发批处理Java EE 7方式时可能会经常使用它们. 1.运行前预定义的属性/参数 预定 ...

  9. java 获取集合对象中某个属性不为空的数据集合 lambda获取【拉姆达表达式 】

    首先我创建了一个测试的类. 这个随意哈. public class Person {private String name;private String age;private Integer id; ...

最新文章

  1. 时间序列入门教程,从理论到业务实践,Kaggle kernels Master 整理分享
  2. 学习python好学吗-零基础学python难吗?好学吗?
  3. Python教程:多变量的灵活处理
  4. C++——《算法分析与设计》实验报告——单源最短路径问题
  5. 线段树动态开点区间加区间求和
  6. ASP.Net 使用SqlBulkCopy批量插入
  7. MFC+ODBC操作Access数据库pdf版
  8. 【白皮书分享】2021年智慧城市白皮书:依托智慧服务,共创新型智慧城市.pdf(附下载链接)
  9. 基于预训练深度学习算法的番茄作物病害分类
  10. 写给大忙人的维生素一览表【饮食健康规律】
  11. 彻底了解HASH算法及应用(一)
  12. Cockos REAPER for Mac(音轨录制编辑软件)
  13. WDS+MDT网络部署操作系统
  14. 程序员坐牢了,会被安排去写代码吗?
  15. Flutter之导航栏骨架实现
  16. 这10本豆瓣高分经典数学书,果断收藏!
  17. mach_absolute_time 高效计算时间差
  18. html鼠标移除事件监听,Javascript:DOM事件(监听鼠标点击/释放,鼠标悬停/离开等)...
  19. 高中英语解析(3500词汇)
  20. c#启动时窗口默认光标聚焦位置设置

热门文章

  1. SAP CRM PPR调试截图,头都搞大了,希望这问题这辈子只遇到这次
  2. PHP CLI应用的调试原理
  3. android apk自动安装包下载,Android实现应用下载并自动安装apk包
  4. matlab 随机数权重,MATLAB中加权随机数
  5. python numpy矩阵乘法_高维Python-Numpy矩阵乘法
  6. 打印字符串(C语言,全排列)
  7. 单词搜索Python解法
  8. ubuntu下mysql编码格式设置_Ubuntu 16.04.1下修改MySQL默认编码
  9. gis怎么通过水库划分子流域_ArcGIS提取小流域——以北京为例,提取出密云水库...
  10. python学习-异常(异常类型,异常处理、自定义异常)