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

Posted koaler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java解析xml ②之正则表达式配合解析相关的知识,希望对你有一定的参考价值。

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

工具类函数

  //获取 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 ②之正则表达式配合解析的主要内容,如果未能解决你的问题,请参考以下文章

为啥用正则表达式解析 XML 是个坏主意? [关闭]

在java中解析xml有哪几种方法

java解析xml的几种方式哪种最好?

通过正则表达式实现简单xml文件解析

您能否提供一些示例说明为啥使用正则表达式难以解析 XML 和 HTML? [关闭]

您能否提供一些示例说明为啥使用正则表达式难以解析 XML 和 HTML? [关闭]