XStream转换器: 处理xml节点中既有属性又有值
1.需处理的数据:
<orderInfo orderName="酸奶" orderType="奶制品" orderPrice="5.00">2</orderInfo>
2.处理xml节点中既有属性又有值,有两种方式
使用Xstram自带的转换器
自定义的转换器
3.示例:
3.1.JavaBean实体
package com.newcapec.dao.domain;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
/**
* @version V1.0
* @Title:
JavaBean实体* @ClassName: com.newcapec.dao.domain.enums
* @Description:
* @Copyright 2016-2017 - Powered By 研发中心
* @author: 王延飞
* @date:2017/12/27 8:05
*/
@XStreamAlias("orderInfo")
// 自带的转换器
//@XStreamConverter(value=ToAttributedValueConverter.class, strings={"orderNumber"})
// 自定义的转换器
@XStreamConverter(OrderConverter.class)
public class Order {
@XStreamAsAttribute
private String orderName;
@XStreamAsAttribute
private String orderType;
@XStreamAsAttribute
private String orderPrice;
// @XStreamOmitField
private String orderNumber;
public Order() {
}
public Order(String orderName, String orderType, String orderPrice, String orderNumber) {
this.orderName = orderName;
this.orderType = orderType;
this.orderPrice = orderPrice;
this.orderNumber = orderNumber;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public String getOrderType() {
return orderType;
}
public void setOrderType(String orderType) {
this.orderType = orderType;
}
public String getOrderPrice() {
return orderPrice;
}
public void setOrderPrice(String orderPrice) {
this.orderPrice = orderPrice;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
@Override
public String toString() {
return "Order{" +
"orderName='" + orderName + '\'' +
", orderType='" + orderType + '\'' +
", orderPrice='" + orderPrice + '\'' +
", orderNumber='" + orderNumber + '\'' +
'}';
}
public static void main(String[] args) {
Order order = new Order("酸奶", "奶制品", "5.00", "2");
XStream xStream = new XStream();
xStream.autodetectAnnotations(true);//自动检测注解
xStream.processAnnotations(Order.class);//应用Person类的注解
String toXML = xStream.toXML(order);
// 序列化
System.out.println("【序列化】:"+toXML);
// 反序列化
Object fromXML = xStream.fromXML("【反序列化】:"+toXML);
System.out.println(fromXML);
}
}
3.2.自定义转换器:
package com.newcapec.dao.domain;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
/**
* @version V1.0
* @Title:
* @ClassName: com.newcapec.dao.domain
* @Description:
自定义转换器* @Copyright 2016-2017 - Powered By 研发中心
* @author: 王延飞
* @date:2017/12/27 8:42
*/
public class OrderConverter implements Converter {
//转换条件
@Override
public boolean canConvert(Class type) {
return type.equals(Order.class);
}
/**
* 将java对象转为xml时使用
*/
@Override
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
Order order = (Order) source;
writer.addAttribute("orderName", order.getOrderName());
writer.addAttribute("orderType", order.getOrderType());
writer.addAttribute("orderPrice", order.getOrderPrice());
writer.setValue(order.getOrderNumber());
}
/**
* 将xml转为java对象使用
*/
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
// 在解析order元素时,先创建一个Order对象
Order order = new Order();
// 将order元素的name属性设置为Order对象的name属性值
order.setOrderName(reader.getAttribute("orderName"));
order.setOrderType(reader.getAttribute("orderType"));
order.setOrderPrice(reader.getAttribute("orderPrice"));
// 将order元素的txt值设置为Order对象的value值
order.setOrderNumber(reader.getValue());
return order;
}
}
3.3.输出结果:
【序列化】:<orderInfo orderName="酸奶" orderType="奶制品" orderPrice="5.00">2</orderInfo>
【反序列化】:Order{orderName='酸奶', orderType='奶制品', orderPrice='5.00', orderNumber='2'}
XStream转换器: 处理xml节点中既有属性又有值相关推荐
- blogic-io.xml文件中的出力属性和output.javabean文件中的属性需要一一对应
关于blogic-io文件和其他一些文件的关系 resultSetObject(outputObject) 在blogic-io.xml 文件中对应的此blogic有的result设置的属性,在输出对 ...
- C# 添加xml节点多了xmlns属性问题
当父节点有xmlns属性时,动态创建子节点,会默认增加一个 xmlns="" 的节点属性值. 原有 doc.CreateElement("son-node"); ...
- Hibernate 中Datetime类型属性数据库默认值
为什么80%的码农都做不了架构师?>>> 在有些时间,我们在设置Hibernate 的配置文件时希望POCO类的一个属性使用数据库中的默认值,这种情况出现在应用服务器和数据服务 ...
- MyBatis框架学习:<select>节点中的resultType和resultMap属性
1.为什么要进行resultType或resultMap注解配置 当需要实现的数据访问是查询类型的,在<select>节点中必须配置resultType或resultMap中的某1个属性( ...
- Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用
一. 在res/values 文件下定义一个attrs.xml 文件.代码如下: <?xml version="1.0" encoding="utf-8" ...
- (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...
- java xmlns_如何从xml和java中的根元素中删除xmlns属性
我想从以下xml字符串中删除xmlns属性.我编写了一个 java程序,但不确定它是否需要在这里完成. 如何删除xmlns属性并获取修改后的xml字符串? 输入XML字符串: abc 预期的XML输出 ...
- 在 Hibernate 中inverse的属性
hibernate配置文件中有这么一个属性inverse,它是用来指定关联的控制方的. inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联 由对方控制. 见例子 ...
- java xml添加节点_Java对XML节点的修改、添加、删除 –By Xstream框架
在J2EE.Java项目中对xml操作是一项非常常见的事情,在我认识了XStream以后,才彻底明白XML模型对象的概念,使用XStream让我XML的设计不由自主更符合OO的风格.另外,除了在设计上 ...
最新文章
- Logstash 推送告警到阿里钉钉(Dingtalk)
- python.freelycode.com-快速提示-使用Modin加速Pandas
- CTFshow 命令执行 web43
- 一款嵌入式监听地图测试软件(开发)
- .NET 6 中哈希算法的简化用法
- centos7php自启动,centos7系统下nginx安装并配置开机自启动操作
- 一个三十岁男人的婚姻思考
- 除去WebView默认存在的一定像素的边距问题
- 《AutoCAD 2016中文版从入门到精通》——1.5 基本输入操作
- Unity多个场景叠加或大场景处理方法小结
- C语言如何调用REFPROP软件,coolprop调用refprop计算流体的热力学性质和传输特性
- maven打包的时候同时打源码包,并同时将源码包上传私服
- 分享一个免费开源的视频录制软件(OBS)
- 【每日一题】一起冲击蓝桥杯吧——Day5【蓝桥真题一起练】
- Android之 APP创建或删除快捷方式
- YDOOK:ANSYS 进行电磁场仿真的第三步:施加边界条件和载荷
- 经验分享:利用树莓派开发板制作无线路由器
- 301转向应该怎么做,冬镜说Apache应该谨记这几点
- Ubuntu18.04安装显卡驱动重启后出现黑屏问题
- PPP再迎风口 相关概念股表现格外抢眼
热门文章
- 兰州大学计算机专业复试流程,兰大计算机复试相关事宜
- 【蓝桥杯练习】算法提高 贪吃的大嘴
- 简易的验证码自动识别脚本
- 2022 auto.js实现淘宝双十一活动自动完成 解放双手(简单版)
- springboot+layui样式加载不进来No mapping for GET /layui/css/layui.css
- 主机可以ping通外网,但是虚拟机不可以
- 我常用的firefox几款插件
- win8配置_《FIFA 20》PC配置需求公布:i3+GTX660即可流畅运行
- 考研中会考的Linux命令,Linux 初步
- UltraEdit 32 注册码