xstream 解析xml报文
一、xml一种格式的数据转换为对象
pom.xml引入
<!--javaBean和XML的双向转换-->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.</version>
</dependency>
xml文件模板
<?xml version="1.0" encoding="GBK"?>
<MESSAGE>
<MESSAGEHEAD>
<MESSAGEID/>
<SRC/>
</MESSAGEHEAD>
<MESSAGEBODY>
<TRANLIST>
<TRAN_DATE/>
<TRAN_TIME/>
</TRANLIST>
</MESSAGEBODY>
</MESSAGE>
后台需要创建
1、 总类Total
class Total
private static final String headInfo = "<?xml version=\"1.0\" encoding=\"GBK\"?>"; @XStreamAlias("MESSAGEHEAD")
private Head head; @XStreamAlias("MESSAGEBODY")
private Body body;
// getter setter
2、头部信息Head
class Head
@XStreamAlias("MESSAGEID")
private String messageId; @XStreamAlias("SRC")
private String src; // getter settter
3、Body,明细类集合
class Body
@XStreamImplicit(itemFieldName = "TRANLIST")
private List<Detail> detail;
4、Detail明细类
class Detail
@XStreamConverter(value = XStreamDateConverter.class)
@XStreamAsAttribute
@XStreamAlias("TRAN_DATE")
private Date tranDate; @XStreamAlias("TRAN_TIME")
private String tranTime;
// getter setter
需要强调的是: String类型不需要转换,其他的类型都可以通过实现接口SingleValueConverter来实现转换格式,编写一个转换日期Date格式的转换,其他类似
public class XStreamDateConverter implements SingleValueConverter {
private final String YMD = "yyyyMMdd";
SimpleDateFormat dateFormat = new SimpleDateFormat(YMD);
@Override
public String toString(Object o) {
String result = null;
if (o instanceof Date) {
Date date = (Date) o;
result = dateFormat.format(date);
}
return result;
}
@Override
public Object fromString(String s) {
Date date = null;
if (s != null && !"".equals(s)) {
try {
date = dateFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}
@Override
public boolean canConvert(Class aClass) {
return Date.class == aClass;
}
}
基础工作已经完成,接下来就是将xml转换为对象实体
public static Total transXmlToObject(String xmlBody) {
XStream xStream = new XStream();
xStream.alias("MESSAGE", Total.class);
xStream.alias("MESSAGEHEAD", Head.class);
xStream.alias("MESSAGEBODY", Body.class);
xStream.alias("TRANLIST", Detail.class);
xStream.processAnnotations(new Class[]{Total.class, Head.class, Body.class, Detail.class});
Object object = xStream.fromXML(xmlBody);
Total data = (Total) object;
return data;
}
xstream 解析xml报文的更多相关文章
- java 写webservice接口解析xml报文
1 <!--解析xml报文--> 2 <dependency> 3 <groupId>dom4j</groupId> 4 <artifactId& ...
- Xstream 解析xml文件内容
刚刚接手的一个项目,接到一个对接用户数据的需求,对方使用的是xml格式来传输文件,特此记下解析该类文件的方法 public interface XmlResolver<T> { XStre ...
- 解析xml报文,xml与map互转
这段时间写了一个关于xml报文的工具类,做一下具体的讲解: xml文本 <NTMMessage version="1.03"> <NTMHeader> &l ...
- xstream解析xml时遇到特殊字符出错
在xml中有"&"符号时,解析xml出错 解决办法: 将&替换成&
- XML解析---利用XStream解析xml数据及反构造Java对象
XStream 是一个轻量级的.简单易用的开放源代码 Java库,用于将 Java 对象序列化为 XML 或者再转换回来.而且XStream还能将java对象转成其它格式,比如JSon. 需要用到的包 ...
- Xstream解析XML
<oschina> <catalog>1</catalog> <newsCount>0</newsCount> <pagesize&g ...
- Java开发笔记(一百零九)XML报文的定义和解析
前面介绍了JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型. ...
- java生成解析xml的另外两种方法Xstream
Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...
- xml报文解析和组装
package com.xjts.cipher.util;import java.io.File;import java.io.FileWriter;import java.io.IOExceptio ...
随机推荐
- Linux入门——基础系统设置命令
以下为centos7实验环境 1.网卡管理工具命令——nmcli 参考:http://www.iteye.com/topic/1141839 2.主机名称设置——hostnamectl [root@s ...
- Linux入门——shell脚本常用信息小结
1.shell中的$默认变量 $n $1 表示第一个参数,$2 表示第二个参数 ... $# 命令行参数的个数 $0 当前 ...
- 【笔记学习】Linux系统与虚拟机学习
Part 1 : 基于VirtualBox虚拟机安装Ubuntu 问题剪辑 --给一开始未知的我的科普指南 1. VirtualBox不能创建64位虚拟机 解决办法: 开启虚拟化技术 详细:重启电脑, ...
- pgpool-II的master-slave模式的分析
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页 现象描述: 客户来邮件,问:为何Pgpool-II ...
- ubuntu 16.04 安装php 5 6等版本
//加入ppa $ sudo add-apt-repository ppa:ondrej/php $ sudo apt-get update //安装5.6 $ sudo apt- //安装7 $ s ...
- 原生与JS交互 iOS
前言 Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”和“Web App跨平台开发的优势” ...
- 八、EnterpriseFrameWork框架基础功能之自定义报表
本章写关于框架中的“自定义报表”,类似上章“字典管理”也是三部分功能组成,包括配置报表.对报表按角色授权.查看报表:其核心思想就是实现新增一个报表而不用修改程序代码.不用升级,只需要编写一个存储过程, ...
- Qt creator 最常用的13个快捷键
alt +enter // 自动创建类的定义 F1 // 查看帮助,文档 F2 // 快速到变量声明 Shift + F2 // 函数的声明和定义之间快速切换 F4 // 在 cpp 和 h 文件切换 ...
- Windows操作系统C盘占用空间过多
Windows操作系统C盘占用空间过多 大部分的windows电脑用户在长时间使用PC时都会遇到一个问题,就是C盘占用的空间会越来越多,乃至占满整个C盘. 后来在百度了一波,发现各种方法都试过了,也不 ...
- 广东ACM省赛 E题
题意: 输入一个P 使得存在一个一个N大于等于P, 并且存在m 等于 m/n * (m-1)/(n-1)=1/2. 思路 此题可以利用佩尔方程求解, 也可以打表解决.本次我解决利用的是佩尔方程(其实也 ...