码迷,mamicode.com
首页 > 编程语言 > 详细

java解析xml ②之正则表达式配合解析

时间:2019-12-06 19:01:19      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:start   表达   substring   次数   public   表达式   result   ret   算子   

直接贴代码上来吧,就是简单的正则表达式+搭配字符串查询解析

工具类函数

  //获取 pattern1 与 pattern2 在src字符中  中间的部分字符串
  public String getAttribute(String src,String pattern1,String pattern2){
        String result = null;
        int index1 = 0;
        int index2 = 0;
        index1 =src.indexOf(pattern1);
        index2 = src.indexOf(pattern2);
        result  = src.substring(index1+pattern1.length()+9,index2-3);
        return result;
    }

// 获取第i次出现在string中的字符串str的开始位置 public static int getIndex(String string, int i, String str) { Matcher slashMatcher = Pattern.compile(str).matcher(string); int mIdx = 0; while (slashMatcher.find()) { mIdx++; if (mIdx == i) { break; } } return slashMatcher.start(); }
//计算子串出现的次数 private int countStr(String str,String sToFind) { int num = 0; while (str.contains(sToFind)) { str = str.substring(str.indexOf(sToFind) + sToFind.length()); num ++; } return num; }

使用函数解析xml文件,这是xml文件省略了,re.getBody()返回的就是xml文件格式的字符串,解析的就是这个字符串。

String returnstr = "";
        //存储ids.length条信息
        String[] strs = new String[ids.length];
        List<ItemVO> listVO = new ArrayList<ItemVO>();
        for(int i=0;i<ids.length;i++){
            String id = ids[i];
            //根据Id获取item商品信息,其中包括
            //商品ID 图片 商品名称  店铺名称  当当价库存 商品状态   审核状态 最后修改时间
            ItemVO itemVO = new ItemVO();
            //审核状态 和最后修改时间去ItemList获取
            itemVO.setCheckstate(datatypeStrs[i]);
            itemVO.setLastupdatetime(updatetimeStrs[i]);
            itemVO.setStorename(storename);
            //商品ID 图片 商品名称  店铺名称  价格,库存 商品状态  去Item接口获取
            ItemGetRequest request = new ItemGetRequest();
            ItemGet get = new ItemGet();
            get.setIt(id);
            request.setItemsGet(get);
            ItemGetResponse re = sdkClient.excute(request);

            //开始解析单个的商品
            String itemInfoStr = re.getBody();
            String itemId = getAttribute(itemInfoStr,"<itemID>","</itemID>");
            itemVO.setStoreId(itemId);
            String itemName = getAttribute(itemInfoStr,"<itemName>","</itemName>");
            itemVO.setGoodsname(itemName);
            String unitPrice =getAttribute(itemInfoStr,"<unitPrice>","</unitPrice>");
            itemVO.setUnitPrice(unitPrice);
            String stockCount = getAttribute(itemInfoStr,"<stockCount>","</stockCount>");
            itemVO.setStockCount(stockCount);
            String itemState = getAttribute(itemInfoStr,"<itemState>","</itemState>");
            itemVO.setGoodstate(itemState);
            //解析一下图片
            int countpic = countStr(re.getBody(), "<pic");
            String  pistrs = "";
            int[] beginpic = new int[countpic];
            int[] endpic = new int[countpic];
            for(int h=1;h<=countpic;h++){
                beginpic[h-1] = getIndex(re.getBody(),h,"<pic");
                endpic[h-1] = getIndex(re.getBody(),h,"</pic");
            }
            for(int j=0;j<countpic;j++){
                 int begin0 = beginpic[j];
                 int end0 = endpic[j];
                pistrs += re.getBody().substring(begin0 + 15, end0 - 3);
            }
            itemVO.setPicture(pistrs);
            if(i<ids.length-1)
            returnstr+=itemVO.toString()+"#";
            else
                returnstr+=itemVO.toString();
        }

为了解析这个xml格式字符串,还花了一个小时去分析一下,写的过程其实思路很简答,就是繁琐了一点。

java解析xml ②之正则表达式配合解析

标签:start   表达   substring   次数   public   表达式   result   ret   算子   

原文地址:https://www.cnblogs.com/Koaler/p/11996892.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!