文档章节

玩转XML与JSON

x
 xyz_hq
发布于 2016/07/07 13:15
字数 775
阅读 5
收藏 0

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

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

© 著作权归作者所有

共有 人打赏支持
上一篇: samba的从无到有
下一篇: jquery tips
x
粉丝 0
博文 6
码字总数 5816
作品 0
丰台
程序员
私信 提问
7 天玩转 ASP.NET MVC — 第 7 天

目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 今天是开心的一天。因为我们终于来到了系列学习的最后一节。我相信你喜欢之前的课程,并从中学到了许多。 1. Lab 3...

OneAPM蓝海讯通
2015/08/27
100
0
Json常用组件

Json2.js: 开发者:json官网:http://www.json.org/。 适用环境:用于在不支持JSON对象的浏览器(通常是国内使用IE内核的第三方浏览器)下使用。json2.js提供了json的序列化和反序列化方法,...

龙鸟
2016/12/06
20
0
JSON-lib框架,转换JSON、XML不再困难(转)

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。 一、 准备工作 1、 首先要去官方...

长征2号
2017/10/05
0
0
C# json 转 xml 字符串

版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问。如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问博客。本文地址 https://blog.csdn.net/lindexi_gd/article/details...

lindexi_gd
03/01
0
0
JAVA工具方法 —— JSON转XML 和 XML转JSON

这阵子一直在做一个三方支付,数据传递用的都是xml 但是在项目里都是用的json,没办法 研究了下json和xml互转的方法 这里做下记录。 1. json转xml 相对简单些 用递归即可实现...

蛋黄卷蛋卷
2018/06/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

intellJ IDEA搭建java+selenium自动化环境(maven,selenium,testng)

1.安装jdk1.8; 2.安装intellJ; 3.安装maven; 3.1 如果是单前用户,配置用户环境变量即可,如果是多用户,则需配置系统环境变量,变量名为MAVEN_HOME,赋值D:\Application\maven,往path中...

不最醉不龟归
36分钟前
1
0
聊聊ShenandoahGC的Brooks Pointers

序 本文主要研究一下ShenandoahGC的Brooks Pointers Shenandoah Shenandoah面向low-pause-time的垃圾收集器,它的GC cycle主要有 Snapshot-at-the-beginning concurrent mark包括Init Mark(P......

go4it
昨天
2
0
Makefile通用编写规则

#简单实用的Makefile模板: objs := a.o b.o test:$(objs) gcc -o test $^ # .a.o.d .b.o.d dep_files := $(foreach f,$(objs),.$(f).d) dep_files := $(wildcard $(dep_files)) ifneq ($(d......

shzwork
昨天
1
0
《万历十五年》的读后感作文4000字

《万历十五年》的读后感作文4000字: 万历十五年,即1587年,距今已过去432年。在明朝276的历史中,这一年很平淡,并没有什么特别之处。黄仁宇的《万历十五年》一书,有别于其他的历史叙述方...

原创小博客
昨天
1
0
vue组件系列4、Table封装下

知道了slot 怎么用,才可以理解table这样封装的原因 table插件部分 <template> <div> <!-- 关键字部分 --> <div class="pre_search" v-show="show_key"> <label>关键字:......

轻轻的往前走
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部