一、样例一:

    以根据订单号向支付宝查询支付是否成功为例(成功信息)

    失败信息:

    <?xml version="1.0" encoding="utf-8"?>

      <alipay>
        <is_success>F</is_success>
        <error>TRADE_NOT_EXIST</error>
      </alipay>

    成功信息:

    <?xml version="1.0" encoding="utf-8"?>

      <alipay>
        <is_success>T</is_success>
          <request>
            <param name="_input_charset">utf-8</param>
            <param name="service">single_trade_query</param>
            <param name="partner">2088121424678319</param>
            <param name="out_trade_no">H161021114440198N</param>
          </request>
          <response>
            <trade>
              <body>订单:T16102111443568</body>
              <buyer_email>1176760525@qq.com</buyer_email>
              <buyer_id>2088402231747066</buyer_id>
              <discount>0.00</discount>
              <flag_trade_locked>0</flag_trade_locked>
              <gmt_create>2016-10-21 11:45:06</gmt_create>
              <gmt_last_modified_time>2016-10-21 11:45:16</gmt_last_modified_time>
              <gmt_payment>2016-10-21 11:45:17</gmt_payment>
              <is_total_fee_adjust>F</is_total_fee_adjust>
              <operator_role>B</operator_role>
              <out_trade_no>H161021114440198N</out_trade_no>
              <payment_type>1</payment_type>
              <price>0.01</price>
              <quantity>1</quantity>
              <seller_email>pay@gstarcad.com</seller_email>
              <seller_id>2088121424678319</seller_id>
              <subject>的生活费...</subject>
              <time_out>2017-01-20 11:45:17</time_out>
              <time_out_type>finishFPAction</time_out_type>
              <to_buyer_fee>0.00</to_buyer_fee>
              <to_seller_fee>0.01</to_seller_fee>
              <total_fee>0.01</total_fee>
              <trade_no>2016102121001004060245497067</trade_no>
              <trade_status>TRADE_SUCCESS</trade_status>
              <use_coupon>F</use_coupon>
            </trade>
           </response>
           <sign>25217c932f49868371a301e3151201a2</sign>
           <sign_type>MD5</sign_type>
        </alipay>

    首先解析is_success字段的值,看看结果是T(成功)还是F(失败),具体就不详细作解释,这里只分析为T时的数据,一定要判断,否则若为F再解析因XML格式不一会报错

    Map<Object, Object> map = new HashMap<Object, Object>();

    map = XMLUtil.doXMLParse(result);
    String is_success = map.get("is_success").toString();

  1、工具类XStreamHandle中定义两个方法:   

  /**

     * 实体转xml字符串

   * @param obj

      * @return

    */

  public static String toXml(Object obj) {

   XStream xstream = new XStream(new DomDriver("utf8"));

  xstream.processAnnotations(obj.getClass()); // 识别obj类中的注解

  return xstream.toXML(obj);

   }

   /**

   * 字符串转实体

   * @param xmlStr

   * @param cls

  * @return

   */

   public static <T> T toBean(String xmlStr, Class<T> cls) {

     XStream xstream = new XStream(new DomDriver());

    xstream.processAnnotations(cls);

     @SuppressWarnings("unchecked")

  T t = (T) xstream.fromXML(xmlStr);

   return t;

   }

  2、根据节点的层级关系定义实体(此为重点)

    由顶级节点alipay建的实体Alipay 类(Alipay -response-trade) request暂时不需要解析可用String接收

省略get,set方法

  Alipay 的下级节点response建造类Response

  

省略get,set方法

    Response的下级节点trade建造类    

xml中所有的标签都要解析,否则会报错

3、调用

  String xml="...";  //xml字符串

  Alipay alipay = XStreamHandle.toBean(xml, Alipay.class);

  Trade trade = alipay.getResponse().getTrade();

二、样例二

  books中有好多book数,有价格,书名,作者

  xml样式:  

      <?xml version="1.0" encoding="utf-8"?>

      <books>
        <book price="108">
          <name>Java编程思想</name>
           <author>Bruce Eckel</author>
        </book>
        <book price="52">
          <name>Effective Java</name>
          <author>Joshua Bloch</author>
        </book>
        <book price="118">
          <name>Java 7入门经典</name>
          <author>Ivor Horton</author>
        </book>
      </books>

  1、工具类还用样例一中的工具类,这里不做重复了

  2、根据节点的层级关系定义实体

    根据顶级元素books创建实体

    

  根据子级创建book类

 3、调用

    String xmlString = "......";   //xml内容

    Books books = XStreamHandle.toBean(xmlString, Books.class);
    List<Book> booklist = books.getList();
    System.out.println(booklist.size());

转载于:https://www.cnblogs.com/fengzhanfei/p/6140290.html

复杂的xml转化为java实体相关推荐

  1. 使用JDK的JAXB将XML转化为JAVA对象,原生支持

    工作中有时候会对接XML的数据,其实JDK中的JAXB已经集成了相应的API,可以将XML转化为JAVA对象 使用起来只需关注几个注解,由于是原生支持,也不用引入第三方JAR包,总体来说还算方便. p ...

  2. java json xml app交互_Java 实体 xml 和 json 之间相互转换

    一.相关注解与方法 1.注解(部分) @JsonProperty:把属性的名称序列化成另一个名称 @JsonFormat:日期格式转换(例如:@JsonFormat(timezone="GT ...

  3. ibatis学习笔记(三)java实体跟表映射.xml文件详解

    在项目中使用Ibatis难免会使用到java实体跟表映射.xml. <?xml version="1.0" encoding="UTF-8" ?> ...

  4. java实体在xml和json之间相互转换

    在我们Java开发 接口调试过程中 经常会遇到  实体转换长json.xml 或者json 转换成实体.xml 等多种情况,今天博主给大家详细举例: 1.原生实体与json 相互转换: User us ...

  5. java实体类转换xml_简单实体类和xml文件的相互转换方法

    最近写一个题目,要求将一组员工实体类转换成xml文件,或将xml文件转换成一组实体类.题目不难,但写完感觉可以利用泛型和反射将任意一个实体类和xml文件进行转换.于是今天下午立马动手 试了下,做了个简 ...

  6. mybatis mapper.xml数据库映射生成java实体,增删改查sql语句

    1.问题描述:使用mybatis生成mapper.xml文件的时候经常遇到数据库表字段很多,写mapper.xml文件时转化成java实体很麻烦,写增删改查的sql时也要做 很多重复的工作.程序员就想 ...

  7. 【java】org.xml.sax.SAXParseException;在实体引用中, 实体名称必须紧跟在 '' 后面。解决方法

    org.xml.sax.SAXParseException;在实体引用中, 实体名称必须紧跟在 '&' 后面 在使用自定义的xml文件的时候,要用到$的关系. 如图: 结果就报错了: 经过一番 ...

  8. xml转json和实体类的两种方式

    本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...

  9. java xml 反射_Java 读取XML文件以及Java 的反射机制实现

    Java 读取XML文件以及Java 的反射机制实现 代码部分 import java.io.File; import javax.xml.parsers.DocumentBuilder; impor ...

最新文章

  1. 《科学》盘点2018可能被聚焦的研究领域
  2. java方法中 thread,Java中的線程Thread方法之---join()
  3. elastic-job 的简单使用
  4. lvs增加并发连接,解决因为哈希表过小导致软中断过高问题
  5. pat 乙级 1001 害死人不偿命的(3n+1)猜想(C++)
  6. 论文阅读笔记二十八:You Only Look Once: Unified,Real-Time Object Detection(YOLO v1 CVPR2015)...
  7. 手机日期插件jquery mobiscroll 实例
  8. java split空值也保留_Java内存大家都知道,但你知道要怎么管理Java内存吗?
  9. 水箱建模最小二乘法_三年级数学上册,《万以内加减法二》单元测试卷分析(二)...
  10. 一个被加入下载QQ盗号木马Trojan.PSW.QQPass.rie代码的网站
  11. 三年半 Java 后端鹅厂面试经历
  12. Spring Boot 前世今生和整体架构分析
  13. 避雷指南:软件测试最容易陷的28个误区
  14. 计算机网络-CSMA/CD协议
  15. 下载安装Android SDK及环境配置(超详细)
  16. 英文星期的来历(都是来自神人)
  17. 通过SSH远程控制服务器
  18. tensorflow报错:tensorflow.python.framework.errors_impl.OutOfRangeError:
  19. 比特率、波特率、数据传输率、采样率的概念 (抽样频率与比特率的关系)
  20. 博途PLC 1200/1500PLC MODBUS-RTU通讯优化(状态机编程)

热门文章

  1. Windows API获取系统配置文件的配置参数
  2. 第18节 知识管理
  3. 如何改android device monitor文件的权限
  4. 解决ftp限制用户访问上层目录后无法登陆问题
  5. 【转】JavaScript事件顺序
  6. 《MINECRAFT我的世界 新手完全攻略(第3版)》一1.4 关于快照版
  7. 那些年借“云”出海的日子
  8. KVM硬件辅助虚拟化之 EPT(Extended Page Table)
  9. Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败...
  10. python web shell