一、xml一种格式的数据转换为对象

pom.xml引入

  1. <!--javaBean和XML的双向转换-->
  2. <dependency>
  3. <groupId>com.thoughtworks.xstream</groupId>
  4. <artifactId>xstream</artifactId>
  5. <version>1.4.</version>
  6. </dependency>

xml文件模板

  1. <?xml version="1.0" encoding="GBK"?>
  2. <MESSAGE>
  3. <MESSAGEHEAD>
  4. <MESSAGEID/>
  5. <SRC/>
  6. </MESSAGEHEAD>
  7. <MESSAGEBODY>
  8. <TRANLIST>
  9. <TRAN_DATE/>
  10. <TRAN_TIME/>
  11. </TRANLIST>
  12. </MESSAGEBODY>
  13. </MESSAGE>

后台需要创建

1、 总类Total

  1. class Total
  2. private static final String headInfo = "<?xml version=\"1.0\" encoding=\"GBK\"?>";
  3.  
  4. @XStreamAlias("MESSAGEHEAD")
  5. private Head head;
  6.  
  7. @XStreamAlias("MESSAGEBODY")
  8. private Body body;
      // getter setter

2、头部信息Head

  1. class Head
  2. @XStreamAlias("MESSAGEID")
  3. private String messageId;
  4.  
  5. @XStreamAlias("SRC")
  6. private String src;
  7.  
  8. // getter settter

3、Body,明细类集合

  1. class Body
  2. @XStreamImplicit(itemFieldName = "TRANLIST")
  3. private List<Detail> detail;

4、Detail明细类

  1. class Detail
  2. @XStreamConverter(value = XStreamDateConverter.class)
  3. @XStreamAsAttribute
  4. @XStreamAlias("TRAN_DATE")
  5. private Date tranDate;
  6.  
  7. @XStreamAlias("TRAN_TIME")
  8. private String tranTime;
      // getter setter

需要强调的是: String类型不需要转换,其他的类型都可以通过实现接口SingleValueConverter来实现转换格式,编写一个转换日期Date格式的转换,其他类似

  1. public class XStreamDateConverter implements SingleValueConverter {
  2.  
  3. private final String YMD = "yyyyMMdd";
  4.  
  5. SimpleDateFormat dateFormat = new SimpleDateFormat(YMD);
  6.  
  7. @Override
  8. public String toString(Object o) {
  9. String result = null;
  10. if (o instanceof Date) {
  11. Date date = (Date) o;
  12. result = dateFormat.format(date);
  13. }
  14. return result;
  15. }
  16.  
  17. @Override
  18. public Object fromString(String s) {
  19. Date date = null;
  20. if (s != null && !"".equals(s)) {
  21. try {
  22. date = dateFormat.parse(s);
  23. } catch (ParseException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. return date;
  28. }
  29.  
  30. @Override
  31. public boolean canConvert(Class aClass) {
  32. return Date.class == aClass;
  33. }
  34. }

基础工作已经完成,接下来就是将xml转换为对象实体

  1. public static Total transXmlToObject(String xmlBody) {
  2. XStream xStream = new XStream();
  3. xStream.alias("MESSAGE", Total.class);
  4. xStream.alias("MESSAGEHEAD", Head.class);
  5. xStream.alias("MESSAGEBODY", Body.class);
  6. xStream.alias("TRANLIST", Detail.class);
  7. xStream.processAnnotations(new Class[]{Total.class, Head.class, Body.class, Detail.class});
  8.  
  9. Object object = xStream.fromXML(xmlBody);
  10. Total data = (Total) object;
  11. return data;
  12. }
  1.  

xstream 解析xml报文的更多相关文章

  1. java 写webservice接口解析xml报文

    1 <!--解析xml报文--> 2 <dependency> 3 <groupId>dom4j</groupId> 4 <artifactId& ...

  2. Xstream 解析xml文件内容

    刚刚接手的一个项目,接到一个对接用户数据的需求,对方使用的是xml格式来传输文件,特此记下解析该类文件的方法 public interface XmlResolver<T> { XStre ...

  3. 解析xml报文,xml与map互转

    这段时间写了一个关于xml报文的工具类,做一下具体的讲解: xml文本 <NTMMessage version="1.03"> <NTMHeader> &l ...

  4. xstream解析xml时遇到特殊字符出错

    在xml中有"&"符号时,解析xml出错 解决办法: 将&替换成&

  5. XML解析---利用XStream解析xml数据及反构造Java对象

    XStream 是一个轻量级的.简单易用的开放源代码 Java库,用于将 Java 对象序列化为 XML 或者再转换回来.而且XStream还能将java对象转成其它格式,比如JSon. 需要用到的包 ...

  6. Xstream解析XML

    <oschina> <catalog>1</catalog> <newsCount>0</newsCount> <pagesize&g ...

  7. Java开发笔记(一百零九)XML报文的定义和解析

    前面介绍了JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型. ...

  8. java生成解析xml的另外两种方法Xstream

    Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...

  9. xml报文解析和组装

    package com.xjts.cipher.util;import java.io.File;import java.io.FileWriter;import java.io.IOExceptio ...

随机推荐

  1. C++基本概念复习

    照着https://www.w3cschool.cn/cpp/,把C++的基础概念顺了一遍,虽然很久没用C++,还是整理一下. #include "stdafx.h"; #incl ...

  2. spring_cloud多个微服务访问时偶发forward_error问题

    1.问题: 最近在做SpringBoot项目的时候,有多个分开的微服务,偶发forward error 问题 2.猜想: 个人理解为服务跳转错误,可能本身没找到目标服务,或者目标服务损坏 3.解决: ...

  3. tableView--iOS11适配和iPhoneX适配

    1.UIScrollView及其子类在IOS 11之前的版本UI显示完全正常,但是在IOS 11上面会显示奇葩的界面. (1)先看一下UITablevIew. 原本在VC里面的automaticall ...

  4. .NET core 项目部署在windows 服务器方法以及iis 访问报 500.19错误的解决办法

    将本地发布的服务本地运行没问题,发布上云windows 服务器就报 500.19 0x8007000d 是因为云服务器没有安装.net core相关的插件,比如.NET CORE sdk等,请按照该文 ...

  5. oracle 查看锁表及解锁的语句

    解锁语句: alter system kill session 'sid, serial#'; alter system kill session '23, 1647'; 查询那些对象被锁: sele ...

  6. Java 分割、合并byte数组

    场景:上传文件较大,把存放文件内容byte数组拆分成小的.下载的时候按照顺序合并. 起初觉得挺麻烦的,写完觉得挺简单. 切割: /** * 拆分byte数组 * * @param bytes * 要拆 ...

  7. Mybatis中的几种注解映射

    1.  普通映射 2. @Select("select * from mybatis_Student where id=#{id}") 3. public Student getS ...

  8. mysql5.5 升级到 5.7 的坑

    1.大概思路,docker 新启一个mysql5.7 端口映射到3307 2. 导出5.5 的.sql文件,导入5.7中 3.测试通过后,可将5.5关闭.5.7端口改回3306 GRANT ALL P ...

  9. linux 下 mysql安装和配置

    最近在学习R语言,看到R与数据库交互这一部分,就自己动手实践了一下,数据库选择的是mysql,主要记录下linux下怎么安装mysql. 网上的很多资料都有相关的文章,这里只是记录下自己安装过程中遇到 ...

  10. asp.net mvc access数据库操作

    连接access数据库其实也简单,只要按照mvc的模式来就可以,遵循c v约定就可以 既然渲染试图是强类型,那么取得的数据就转换成强类型,其他一切和asp.net操作一样 DB mydb = new ...