1.需处理的数据:

  1. <orderInfo orderName="酸奶" orderType="奶制品" orderPrice="5.00">2</orderInfo>

2.处理xml节点中既有属性又有值,有两种方式

  1. 使用Xstram自带的转换器
  2. 自定义的转换器

3.示例:

3.1.JavaBean实体

  1. package com.newcapec.dao.domain;
  2. import com.thoughtworks.xstream.XStream;
  3. import com.thoughtworks.xstream.annotations.XStreamAlias;
  4. import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
  5. import com.thoughtworks.xstream.annotations.XStreamConverter;
  6. /**
  7. * @version V1.0
  8. * @Title: JavaBean实体
  9. * @ClassName: com.newcapec.dao.domain.enums
  10. * @Description:
  11. * @Copyright 2016-2017 - Powered By 研发中心
  12. * @author: 王延飞
  13. * @date:2017/12/27 8:05
  14. */
  15. @XStreamAlias("orderInfo")
  16. // 自带的转换器
  17. //@XStreamConverter(value=ToAttributedValueConverter.class, strings={"orderNumber"})
  18. // 自定义的转换器
  19. @XStreamConverter(OrderConverter.class)
  20. public class Order {
  21. @XStreamAsAttribute
  22. private String orderName;
  23. @XStreamAsAttribute
  24. private String orderType;
  25. @XStreamAsAttribute
  26. private String orderPrice;
  27. // @XStreamOmitField
  28. private String orderNumber;
  29. public Order() {
  30. }
  31. public Order(String orderName, String orderType, String orderPrice, String orderNumber) {
  32. this.orderName = orderName;
  33. this.orderType = orderType;
  34. this.orderPrice = orderPrice;
  35. this.orderNumber = orderNumber;
  36. }
  37. public String getOrderName() {
  38. return orderName;
  39. }
  40. public void setOrderName(String orderName) {
  41. this.orderName = orderName;
  42. }
  43. public String getOrderType() {
  44. return orderType;
  45. }
  46. public void setOrderType(String orderType) {
  47. this.orderType = orderType;
  48. }
  49. public String getOrderPrice() {
  50. return orderPrice;
  51. }
  52. public void setOrderPrice(String orderPrice) {
  53. this.orderPrice = orderPrice;
  54. }
  55. public String getOrderNumber() {
  56. return orderNumber;
  57. }
  58. public void setOrderNumber(String orderNumber) {
  59. this.orderNumber = orderNumber;
  60. }
  61. @Override
  62. public String toString() {
  63. return "Order{" +
  64. "orderName='" + orderName + '\'' +
  65. ", orderType='" + orderType + '\'' +
  66. ", orderPrice='" + orderPrice + '\'' +
  67. ", orderNumber='" + orderNumber + '\'' +
  68. '}';
  69. }
  70. public static void main(String[] args) {
  71. Order order = new Order("酸奶", "奶制品", "5.00", "2");
  72. XStream xStream = new XStream();
  73. xStream.autodetectAnnotations(true);//自动检测注解
  74. xStream.processAnnotations(Order.class);//应用Person类的注解
  75. String toXML = xStream.toXML(order);
  76. // 序列化
  77. System.out.println("【序列化】:"+toXML);
  78. // 反序列化
  79. Object fromXML = xStream.fromXML("【反序列化】:"+toXML);
  80. System.out.println(fromXML);
  81. }
  82. }

3.2.自定义转换器:

  1. package com.newcapec.dao.domain;
  2. import com.thoughtworks.xstream.converters.Converter;
  3. import com.thoughtworks.xstream.converters.MarshallingContext;
  4. import com.thoughtworks.xstream.converters.UnmarshallingContext;
  5. import com.thoughtworks.xstream.io.HierarchicalStreamReader;
  6. import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
  7. /**
  8. * @version V1.0
  9. * @Title:
  10. * @ClassName: com.newcapec.dao.domain
  11. * @Description: 自定义转换器
  12. * @Copyright 2016-2017 - Powered By 研发中心
  13. * @author: 王延飞
  14. * @date:2017/12/27 8:42
  15. */
  16. public class OrderConverter implements Converter {
  17. //转换条件
  18. @Override
  19. public boolean canConvert(Class type) {
  20. return type.equals(Order.class);
  21. }
  22. /**
  23. * 将java对象转为xml时使用
  24. */
  25. @Override
  26. public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
  27. Order order = (Order) source;
  28. writer.addAttribute("orderName", order.getOrderName());
  29. writer.addAttribute("orderType", order.getOrderType());
  30. writer.addAttribute("orderPrice", order.getOrderPrice());
  31. writer.setValue(order.getOrderNumber());
  32. }
  33. /**
  34. * 将xml转为java对象使用
  35. */
  36. @Override
  37. public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
  38. // 在解析order元素时,先创建一个Order对象
  39. Order order = new Order();
  40. // 将order元素的name属性设置为Order对象的name属性值
  41. order.setOrderName(reader.getAttribute("orderName"));
  42. order.setOrderType(reader.getAttribute("orderType"));
  43. order.setOrderPrice(reader.getAttribute("orderPrice"));
  44. // 将order元素的txt值设置为Order对象的value值
  45. order.setOrderNumber(reader.getValue());
  46. return order;
  47. }
  48. }

3.3.输出结果:

  1. 【序列化】:<orderInfo orderName="酸奶" orderType="奶制品" orderPrice="5.00">2</orderInfo>
  2. 【反序列化】:Order{orderName='酸奶', orderType='奶制品', orderPrice='5.00', orderNumber='2'}

XStream转换器: 处理xml节点中既有属性又有值相关推荐

  1. blogic-io.xml文件中的出力属性和output.javabean文件中的属性需要一一对应

    关于blogic-io文件和其他一些文件的关系 resultSetObject(outputObject) 在blogic-io.xml 文件中对应的此blogic有的result设置的属性,在输出对 ...

  2. C# 添加xml节点多了xmlns属性问题

    当父节点有xmlns属性时,动态创建子节点,会默认增加一个 xmlns="" 的节点属性值. 原有 doc.CreateElement("son-node"); ...

  3. Hibernate 中Datetime类型属性数据库默认值

    为什么80%的码农都做不了架构师?>>>    在有些时间,我们在设置Hibernate 的配置文件时希望POCO类的一个属性使用数据库中的默认值,这种情况出现在应用服务器和数据服务 ...

  4. MyBatis框架学习:<select>节点中的resultType和resultMap属性

    1.为什么要进行resultType或resultMap注解配置 当需要实现的数据访问是查询类型的,在<select>节点中必须配置resultType或resultMap中的某1个属性( ...

  5. Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

    一. 在res/values 文件下定义一个attrs.xml 文件.代码如下: <?xml version="1.0" encoding="utf-8" ...

  6. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql

    http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...

  7. java xmlns_如何从xml和java中的根元素中删除xmlns属性

    我想从以下xml字符串中删除xmlns属性.我编写了一个 java程序,但不确定它是否需要在这里完成. 如何删除xmlns属性并获取修改后的xml字符串? 输入XML字符串: abc 预期的XML输出 ...

  8. 在 Hibernate 中inverse的属性

    hibernate配置文件中有这么一个属性inverse,它是用来指定关联的控制方的. inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联 由对方控制. 见例子 ...

  9. java xml添加节点_Java对XML节点的修改、添加、删除 –By Xstream框架

    在J2EE.Java项目中对xml操作是一项非常常见的事情,在我认识了XStream以后,才彻底明白XML模型对象的概念,使用XStream让我XML的设计不由自主更符合OO的风格.另外,除了在设计上 ...

最新文章

  1. Logstash 推送告警到阿里钉钉(Dingtalk)
  2. python.freelycode.com-快速提示-使用Modin加速Pandas
  3. CTFshow 命令执行 web43
  4. 一款嵌入式监听地图测试软件(开发)
  5. .NET 6 中哈希算法的简化用法
  6. centos7php自启动,centos7系统下nginx安装并配置开机自启动操作
  7. 一个三十岁男人的婚姻思考
  8. 除去WebView默认存在的一定像素的边距问题
  9. 《AutoCAD 2016中文版从入门到精通》——1.5 基本输入操作
  10. Unity多个场景叠加或大场景处理方法小结
  11. C语言如何调用REFPROP软件,coolprop调用refprop计算流体的热力学性质和传输特性
  12. maven打包的时候同时打源码包,并同时将源码包上传私服
  13. 分享一个免费开源的视频录制软件(OBS)
  14. 【每日一题】一起冲击蓝桥杯吧——Day5【蓝桥真题一起练】
  15. Android之 APP创建或删除快捷方式
  16. YDOOK:ANSYS 进行电磁场仿真的第三步:施加边界条件和载荷
  17. 经验分享:利用树莓派开发板制作无线路由器
  18. 301转向应该怎么做,冬镜说Apache应该谨记这几点
  19. Ubuntu18.04安装显卡驱动重启后出现黑屏问题
  20. PPP再迎风口 相关概念股表现格外抢眼

热门文章

  1. 兰州大学计算机专业复试流程,兰大计算机复试相关事宜
  2. 【蓝桥杯练习】算法提高 贪吃的大嘴
  3. 简易的验证码自动识别脚本
  4. 2022 auto.js实现淘宝双十一活动自动完成 解放双手(简单版)
  5. springboot+layui样式加载不进来No mapping for GET /layui/css/layui.css
  6. 主机可以ping通外网,但是虚拟机不可以
  7. 我常用的firefox几款插件
  8. win8配置_《FIFA 20》PC配置需求公布:i3+GTX660即可流畅运行
  9. 考研中会考的Linux命令,Linux 初步
  10. UltraEdit 32 注册码