复杂的xml转化为java实体

发布时间:2024-12-08 16:52

将复杂概念转化为图表理解 #生活技巧# #工作学习技巧# #阅读笔记方法#

最新推荐文章于 2024-10-25 15:37:41 发布

snowflakefengzf 于 2018-09-19 11:11:10 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

一、样例一:
    以根据订单号向支付宝查询支付是否成功为例(成功信息)
    失败信息:

<?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>

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

首先解析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(); 123

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;    }

1234567891011121314151617181920212223

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"?>

                          Java编程思想
           Bruce Eckel

                            Effective Java
          Joshua Bloch

                            Java 7入门经典
          Ivor Horton

                  1、工具类还用样例一中的工具类,这里不做重复了
  2、根据节点的层级关系定义实体
   根据顶级元素books创建实体
    在这里插入图片描述
     根据子级创建book类
     在这里插入图片描述
      3、调用
    String xmlString = “…”; //xml内容
    Books books = XStreamHandle.toBean(xmlString, Books.class);
    List booklist = books.getList();
    System.out.println(booklist.size());
    在这里插入图片描述

网址:复杂的xml转化为java实体 https://www.yuejiaxmz.com/news/view/415597

相关内容

基于java+springboot+vue的二手旧物置换网站(源码+LW+部署讲解)
mybatis resultmap映射结果集(xml映射配置一)
12大常用自动化测试工具,请记得转发收藏!
Android开发实战:基于Java的日程管理日历应用设计与实现
基于java+springboot的二手电子产品需求分析系统设计与实现
java毕业设计社区服务平台的设计与实现(Springboot+mysql+jdk1.8+maven3.39)
几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >
dentity在Java里是什么意思
基于java的健康管理系统设计与实现
【网站项目】java智慧生活分享平台初步设计和实现

随便看看