复杂的xml转化为java实体

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


      
        F
        TRADE_NOT_EXIST
      
    成功信息:
    
      
        T
          
            utf-8
            single_trade_query
            2088121424678319
            H161021114440198N
          
          
            
              订单:T16102111443568
              [email protected]
              2088402231747066
              0.00
              0
              2016-10-21 11:45:06
              2016-10-21 11:45:16
              2016-10-21 11:45:17
              F
              B
              H161021114440198N
              1
              0.01
              1
              [email protected]
              2088121424678319
              的生活费...
              2017-01-20 11:45:17
              finishFPAction
              0.00
              0.01
              0.01
              2016102121001004060245497067
              TRADE_SUCCESS
              F
            
           
           25217c932f49868371a301e3151201a2
           MD5
        

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

Map map = new HashMap();
    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 toBean(String xmlStr, Class 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接收
    复杂的xml转化为java实体_第1张图片
    省略get,set方法

Alipay 的下级节点response建造类Response
  复杂的xml转化为java实体_第2张图片
  省略get,set方法

Response的下级节点trade建造类  
 复杂的xml转化为java实体_第3张图片
 xml中所有的标签都要解析,否则会报错
3、调用
  String xml="…"; //xml字符串
  Alipay alipay = XStreamHandle.toBean(xml, Alipay.class);
  Trade trade = alipay.getResponse().getTrade();
  
二、样例二
  books中有好多book数,有价格,书名,作者
  xml样式:  
      
      
        
          Java编程思想
           Bruce Eckel
        
        
          Effective Java
          Joshua Bloch
        
        
          Java 7入门经典
          Ivor Horton
        
      
  1、工具类还用样例一中的工具类,这里不做重复了
  2、根据节点的层级关系定义实体
   根据顶级元素books创建实体
    复杂的xml转化为java实体_第4张图片
     根据子级创建book类
     复杂的xml转化为java实体_第5张图片
      3、调用
    String xmlString = “…”; //xml内容
    Books books = XStreamHandle.toBean(xmlString, Books.class);
    List booklist = books.getList();
    System.out.println(booklist.size());
    复杂的xml转化为java实体_第6张图片

你可能感兴趣的:(XML)