玩转XML与JSON

玩转XML

    每次获取xml文本值或遍历子节点的时候,看到这个xml的节点这么深怎么获取我们想要的节点、和文本呢??? 好了闲话不扯了,该是我们演示的时候。

1、实例: xml 字符串转xml对象  注意:xml文件同样方式解析

String xmlString =

  “<result>

        <status>success</status>

         <statuscode>1</statuscode>

         <time>2015-03-31 06:58:14</time>

        <dataInfo></dataInfo> 

        <dataType>xml</dataType>

         <data>

             <position>

                    <ha> 

                         <city>北京</city>

                         <citycode>bj</citycode>

                         <region>昌平区</region>  

                          <distcode>cp</distcode>

                          <haname>天通苑</haname>   

                           <proptypename>住宅</proptypename>

                            <proptypecode>11</proptypecode>

                   </ha>
                   <ha>

                            <city>南京</city>

                            <citycode>bj</citycode>

                             <region>昌平区</region>

                             <distcode>cp</distcode>

                             <haname>天通苑</haname>

                             <proptypename>住宅</proptypename>

                            <proptypecode>11</proptypecode>

                    </ha>

            </position>  

              <location>

                          <lon>116.41548206505098</lon>

                              <lat>40.06153204024281</lat>

                </location> 

                 <district>

                         <item>

                                 <distname>昌平区</distname>

                                   <distcode>cp</distcode>

                           </item>

                     </district>

    </data>

</result> "

2、采用dom4j进行解析

        1)、获取指定节点文本值,但不知是否有多个

    //String xmlString :xml字符串;String nameSpace :命名空间  例:/result/data/position/ha   /city

      public List<String> strConvertXml(String xmlString ,String nameSpace){
        
          List<String> alist = null;
          Document doc = null;
          try {
              doc = DocumentHelper.parseText(xmlString); // 将字符串转为XML
              alist = new ArrayList<String>();

               //  获取/result/data/position/ha  为了判读ha这级是否有多个
              String parentPath = nameSpace.substring(0,nameSpace.lastIndexOf("/"));

                // 获取city这个节点
              String subPath = nameSpace.substring(nameSpace.lastIndexOf("/")+1);

                // 获取子节点
              List list = doc.selectNodes(parentPath);
              if(list.size()>0){
                  for (Iterator iter = list.iterator(); iter.hasNext();) {  
                      Element ele=(Element)iter.next();

                        // 获取子节点的文本值
                      String eleStr = ele.element(subPath).getText();
                      alist.add(eleStr);
                  }
              }
          }catch(DocumentException e){
              e.printStackTrace();
              
          }
          return alist;
          
    }

控制台打印结果: 北京 南京

2)、获取已知指定节点

    Document     doc = DocumentHelper.parseText(xmlString); // 将字符串转为XML

      // 获取指定的节点(可以进行setText()/getText())

     例如:doc.selectSingleNode("/result/status ").getText()

      //获取指定属性节点的文本值(<status  winTermNo=\"10077\"  > success </status>

     例如:doc.selectSingleNode("/result/status@winTermNo ").getText()

      //获取指定属性的value值(<ha  id="1"  > 北京</ha>

     例如:

              List   nodeList  =   doc.selectNodes(" /result/data/position/ha ");

              for(Iterator iter = nodeList.iterator();iter.hasNext()){

                    Element ele =  (Element)iter.next();

                    String id =  ele.attribute("id").getValue();

            }

玩转JSON

    将json字符串转成json对象进行解析

1、实例 (net.sf.json 进行解析

String jsonString="{\"status\": \"success\", \"statuscode\": \"1\", \"time\": \"2015-11-16 16:10:43\", \"dataInfo\": \"\", \"data\": { \"drawdata\": { \"total\": \"316\",\"row\": [ { \"maxb\": \"246\",\"count\": \"13\",\"minp\": \"95\",\"minb\": \"45\",\"maxp\": \"1200\",\"room\": \"1\"},{ \"maxb\": \"165\", \"count\": \"58\", \"minp\": \"193\", \"minb\": \"95\",\"maxp\": \"950\", \"room\": \"2\"},  {  \"maxb\": \"203\", \"count\": \"213\",\"minp\": \"220\",\"minb\": \"120\",\"maxp\": \"1200\",  \"room\": \"3\" }, {   \"maxb\":\"248\", \"count\": \"32\",\"minp\": \"420\", \"minb\": \"173.39\", \"maxp\": \"1480\", \"room\": \"4\" }  ] }},\"dataType\": \"json\" }"

2、解析json节点

  // String jsonString : json字符串   String nameSpace : 命名空间  例:data/drawdata/row/maxb

  public  List<String> strConvertJson(String jsonString,String nameSpace){

        List<String> alist = new ArrayList<String>();
        String[] split = nameSpace.split("/");
        JSONObject jsonObject = JSONObject.fromObject( jsonString );
        

        // 判断节点的层级(层级大于一层的)
        if(split.length>1){
            String parentPath = nameSpace.substring(0,nameSpace.lastIndexOf("/"));
            split = parentPath.split("/");
            String subPath = nameSpace.substring(nameSpace.lastIndexOf("/")+1);
            for(int i=0;i<split.length;i++){
                if(i==split.length-1){

                    //获取jsonArray数组
                    JSONArray jsonArray = jsonObject.getJSONArray(split[i]);
                    if(jsonArray!=null&&jsonArray.size()>0){
                        for (int j = 0; j < jsonArray.size(); j++) {
                            alist.add((String)jsonArray.getJSONObject(j).get(subPath));
                        }
                    }else{

                        //获取jsonObject对象
                        jsonObject = (JSONObject)jsonObject.get(split[i]);

                        //通过get(”节点“)的方法获取对应的文本值
                        alist.add((String)jsonObject.get(subPath));
                        break;
                    }
                }else{

                     // 层级等于一层
                    jsonObject = (JSONObject)jsonObject.get(split[i]);
                }
            }    
            
        }else{
            alist.add((String)jsonObject.get(split[0]));
        }
        
        return alist;
    }

以上为自己所经历的项目,望读者有所收益。

转载于:https://my.oschina.net/xyzhq/blog/707698

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值