【二】、xml解析

上一篇中说到封装了HttpClient助手类和Json解析响应数据的封装。这节主要扩展响应数据解析类,封装出一个xml解析的实现类,适应微信第三方服务的接口。

主要实现的效果,把xml格式的数据转成map集合的格式,里面可能包含一个map集合,也可能包含一个List集合。甚至会对xml中的标签内属性进行封装,加上attr_前缀进行保存。比如如下格式的xml数据:

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

<!-- Edited by XMLSpy -->
<bookstore key="11111"> 
  <book category="cooking"> 
    <title lang="en">Everyday Italian</title>  
    <author>Giada De Laurentiis</author> 
  </book>  
  <book category="children"> 
    <title lang="en">Harry Potter</title>  
    <author>J K. Rowling</author> 
  </book>  
  <book category="web"> 
    <title lang="en">XQuery Kick Start</title>  
    <author id="1">James McGovern</author>  
    <author id="1">Per Bothner</author>  
    <author id="1">Kurt Cagle</author>  
    <author id="1">James Linn</author>  
    <author id="1">Vaidyanathan Nagarajan</author> 
  </book>  
  <book category="web" cover="paperback"> 
    <title lang="en">Learning XML</title>  
    <author>Erik T. Ray</author> 
  </book>  
  <a category="web" cover="paperback">abc</a>  
  <v category="web" cover="paperback">abc 
    <title lang="en">Learning XML</title>  
    <author>Erik T. Ray</author> 
  </v> 
</bookstore>

应该解释成map之后,转成json格式是如下的,才比较方便操作(这里有一些细节需要说明一下:如果标签中不在含有子标签,那么需要转成map集合的形式,值得key使用value,然后属性还是attr_前缀):

{
  "bookstore": {
    "a": {
      "attr_cover": "paperback", 
      "value": "abc", 
      "attr_category": "web"
    }, 
    "v": {
      "attr_cover": "paperback", 
      "author": {
        "value": "Erik T. Ray"
      }, 
      "title": {
        "attr_lang": "en", 
        "value": "Learning XML"
      }, 
      "attr_category": "web"
    }, 
    "book": [
      {
        "author": {
          "value": "Giada De Laurentiis"
        }, 
        "title": {
          "attr_lang": "en", 
          "value": "Everyday Italian"
        }, 
        "attr_category": "cooking"
      }, 
      {
        "author": {
          "value": "J K. Rowling"
        }, 
        "title": {
          "attr_lang": "en", 
          "value": "Harry Potter"
        }, 
        "attr_category": "children"
      }, 
      {
        "author": [
          {
            "value": "James McGovern", 
            "attr_id": "1"
          }, 
          {
            "value": "Per Bothner", 
            "attr_id": "1"
          }, 
          {
            "value": "Kurt Cagle", 
            "attr_id": "1"
          }, 
          {
            "value": "James Linn", 
            "attr_id": "1"
          }, 
          {
            "value": "Vaidyanathan Nagarajan", 
            "attr_id": "1"
          }
        ], 
        "title": {
          "attr_lang": "en", 
          "value": "XQuery Kick Start"
        }, 
        "attr_category": "web"
      }, 
      {
        "attr_cover": "paperback", 
        "author": {
          "value": "Erik T. Ray"
        }, 
        "title": {
          "attr_lang": "en", 
          "value": "Learning XML"
        }, 
        "attr_category": "web"
      }
    ], 
    "attr_key": "11111"
  }
}

主要的实现类在github中给出:

https://github.com/wulongtao/web-base-master/blob/master/src/main/java/com/xxh/web/util/format/XmlResponseParser.java

有了这个类之后,就可以在HttpClient中使用这个类来解析响应请求了,使用方法也很简单:

Map<String, Object> res = HttpClientHelper.postRawData("http://192.168.100.244:18081/accessService" , reqParams, new XmlResponseParser());

如果使用过android的Volley框架,你会发现其实他也是这样封装的,需要解析不同的数据也是要实现一个接口,只不过Volley是异步的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值