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

简介: XStream转换器: 处理xml节点中既有属性又有值

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. * @Copyright2016-2017  - Powered By 研发中心
  12. * @author: 王延飞
  13. * @date:2017/12/278:05
  14. */
  15. @XStreamAlias("orderInfo")
  16. // 自带的转换器
  17. //@XStreamConverter(value=ToAttributedValueConverter.class, strings={"orderNumber"})
  18. // 自定义的转换器
  19. @XStreamConverter(OrderConverter.class)
  20. publicclassOrder {
  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.    publicOrder() {
  30.    }
  31.    publicOrder(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.    publicvoidsetOrderName(String orderName) {
  41.        this.orderName = orderName;
  42.    }
  43.    public String getOrderType() {
  44.        return orderType;
  45.    }
  46.    publicvoidsetOrderType(String orderType) {
  47.        this.orderType = orderType;
  48.    }
  49.    public String getOrderPrice() {
  50.        return orderPrice;
  51.    }
  52.    publicvoidsetOrderPrice(String orderPrice) {
  53.        this.orderPrice = orderPrice;
  54.    }
  55.    public String getOrderNumber() {
  56.        return orderNumber;
  57.    }
  58.    publicvoidsetOrderNumber(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.    publicstaticvoidmain(String[] args) {
  71.        Orderorder=newOrder("酸奶", "奶制品", "5.00", "2");
  72.        XStreamxStream=newXStream();
  73.        xStream.autodetectAnnotations(true);//自动检测注解
  74.        xStream.processAnnotations(Order.class);//应用Person类的注解
  75.        StringtoXML= xStream.toXML(order);
  76.        // 序列化
  77.        System.out.println("【序列化】:"+toXML);
  78.        // 反序列化
  79.        ObjectfromXML= 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. * @Copyright2016-2017  - Powered By 研发中心
  13. * @author: 王延飞
  14. * @date:2017/12/278:42
  15. */
  16. publicclassOrderConverterimplementsConverter {
  17.    //转换条件
  18.    @Override
  19.    publicbooleancanConvert(Class type) {
  20.        return type.equals(Order.class);
  21.    }
  22.    /**
  23.     * 将java对象转为xml时使用
  24.     */
  25.    @Override
  26.    publicvoidmarshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
  27.        Orderorder= (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.        Orderorder=newOrder();
  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'}



目录
相关文章
|
1月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
1月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
1月前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
149 5
|
1月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
1月前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
86 4
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
76 4
|
1月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
1月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
1月前
|
XML 存储 数据格式
|
1月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树