Java parse an XML string, where XXX is a value taken <aaaa> <! [CDATA [(XXX)]]> </ aaa> which may be used in other ways xml parsing, which is the simplest string parsing

Posted a direct business code, which is the resolution request xml format string returned to the next takes a value which facilitates use.

 @RequestMapping(value="/search",produces = {"text/html;charset=utf-8"})
    public String searchGoods(@RequestParam(value="itemBarCode", required = false)String itemBarCode,
                           @RequestParam(value="typenumber", required = false)String typenumber,
                           @RequestParam(value="mts", required = false)String mts,
                           @RequestParam(value="mte", required = false)String mte,
                           @RequestParam(value="ocdsupport", required = false)String ocdsupport,
                           @RequestParam(value="yunfeimoban", required = false)String yunfeimoban,
                           @RequestParam(value="goodsname", required = false)String goodsname,
                           @RequestParam(value="goodstate", required = false)String goodstate,
                           @RequestParam(value="kucun2", required = false)String kucun2,
                           @RequestParam(value="kucun1", required = false)String kucun1,
                           @RequestParam(value="barcode", required = false)String barcode,
                           @RequestParam(value="type", required = false)String type,
                           @RequestParam(value="innertype", required = false)String innertype,
                           @RequestParam(value="storenumber", required = false)String storenumber,
                           @RequestParam(value="namelabel "required = false) String namelabel,
                           @RequestParam(value="checkstate", required = false)String checkstate,
                           @RequestParam(value="storename", required = false)String storename,
                           @RequestParam(value="pageInfo", required = false)String pageInfo) throws ApiException {
        StoreKeyInfo storeKeyInfo = storeKeyInfoService.getStoreKeyInfo(storename);
        Map<Integer,String> maps = new HashMap<Integer,String>();
        SdkClient sdkClient = null;
        if(storeKeyInfo!=null) {
            String appKey = storeKeyInfo.getAppKey();
            String appSecret = storeKeyInfo.getAppSecret();
            String session = storeKeyInfo.getAuthenCode();
            sdkClient = new SdkClient(appKey, appSecret, session, version,format,
                    connectTimeout, ReadTimeout, needEnableParser, needCheckRequest); 
        } the else { 
            System.out.println ( "Can not find the store: the name of the shop is empty"); 
        } 
        ItemsListGet itemsListGet = new new ItemsListGet (); 
        // start set query conditions, some parameters is set, no not disposed 

        IF (typenumber = null && typenumber.equals ( "!!")) { 
            itemsListGet.setItm (typenumber); 
        } 
        (!! = null && mts.equals MTS (IF "")) { 
            itemsListGet .setMts (MTS); 
        } 
        IF (! = null && mte.equals MTE ( "!")) { 
            itemsListGet.setMte (MTE); 
        } 
        IF (ocdsupport ocdsupport.equals = null && (!! "")){
            itemsListGet.setIs_cod(ocdsupport);
        }
        if(goodsname!=null && !goodsname.equals("")){
            itemsListGet.setName(goodsname);
        }
        if(goodstate!=null && !goodstate.equals("")){
            itemsListGet.setIts(goodstate);
        }
        if(kucun1!=null && !kucun1.equals("")){
            itemsListGet.setSlv(kucun1);
        }
        if(kucun2!=null && !kucun2.equals("")){
            itemsListGet.setShv(kucun2);
        }
        if(barcode!=null && !barcode.equals("")){
            itemsListGet.setBar_code(barcode);
        }
        if(innertype!=null && !innertype.equals("")){
            itemsListGet.setSc(innertype);
        }
        if(namelabel!=null && !namelabel.equals("")){
            itemsListGet.setItb(namelabel);
        }
        if(checkstate!=null && !checkstate.equals("")){
            itemsListGet.setDatatype(checkstate);
        }
        ItemsListGetRequest itemsListGetRequest=new ItemsListGetRequest();
        itemsListGetRequest.setItemsListGet(itemsListGet);
        ItemsListGetResponse result=sdkClient.excute(itemsListGetRequest);

        String[] ids = null;
        String[] updatetimeStrs = null;
        String[] datatypeStrs = null;
        String pageSize = null;
        int index11 = 0;
        int index22 = 0;
        System.out.println("返回的数据是:"+result.getBody());
        index11 = result.getBody().indexOf("<pageTotal><![CDATA[");
        = result.getBody index22 () the indexOf ( "]]> </ pageTotal>");. 
        the pageSize = result.getBody () the substring (index11 + 20 is, index22);.
        Page Integer.valueOf = int (pageSize); 
        System.out.println ( "total page" + pageSize); 
        // page 10 in the Page Control, click on the other pages 11, only called 
        if (page> = 1) { 
            =. 1 Page; 
        } 
        // if no click page, according to the query 
        IF (! = null && PageInfo pageInfo.equals ( "") && pageInfo.equals ( "0")!) { 

            int InsertIndex = 0; // if no incoming PageInfo, the default first page. 
            for (int. 1 = pageIndex; pageIndex <= Page; pageIndex ++) { 
                itemsListGet.setP (String.valueOf (pageIndex)); 
                itemsListGetRequest.setItemsListGet (itemsListGet); 
                Result = sdkClient.excute (itemsListGetRequest); 
                System.out.println ( "
                int count = countStr(result.getBody(), "<itemID><![CDATA[");

                ids= new String[count];
                updatetimeStrs =new String[count];
                datatypeStrs = new String[count];

                int[] indexbegin = new int[1000000];
                int[] indexbegin2 = new int[1000000];
                int[] indexbegin3 = new int[1000000];
                for (int i = 1; i <= count; i++) {
                    indexbegin[i - 1] = getIndex(result.getBody(), i, "<itemID>");
                    indexbegin2[i - 1] = getIndex(result.getBody(), i, "<updateTime>");
                    indexbegin3[i - 1] = getIndex(result.getBody(), i, "<datatype>");
                }
                int[] indexend = new int[1000000];
                int[] indexend2 = new int[1000000];
                int[] indexend3 = new int[1000000];
                for (int i = 1; i <= count; i++) {
                    indexend[i - 1] = getIndex(result.getBody(), i, "</itemID>");
                    indexend2[i - 1] = getIndex(result.getBody(), i, "</updateTime>");
                    indexend3[i - 1] = getIndex(result.getBody(), i, "</datatype>");
                }

                for (; insertIndex - (pageindex - 1) * 20 < count; insertIndex++) {
                    int index1 = 0;
                    int index2 = 0;
                    int index41 = 0;
                    int index42 = 0;
                    int index31 = 0;
                    int index32 = 0;
                    index1 = indexbegin[insertIndex - (pageindex - 1) * 20];
                    index2 = indexend[insertIndex - (pageindex - 1) * 20];
                    ids[insertIndex] = result.getBody().substring(index1 + 17, index2 - 3);

                    index41 = indexbegin2[insertIndex - (pageindex - 1) * 20];
                    index42 = indexend2[insertIndex - (pageindex - 1) * 20];
                    updatetimeStrs[insertIndex] = result.getBody().substring(index41 + 21, index42 - 3);

                    index31 = indexbegin3[insertIndex - (pageindex - 1) * 20];
                    index32 = indexend3[insertIndex - (pageindex - 1) * 20];
                    datatypeStrs [InsertIndex] = result.getBody () the substring (+ index31. 19, index32 -. 3);. 
                } 
            } 

        !} the else IF (PageInfo = null && pageInfo.equals ( "") && pageInfo.equals (! "0"! )) { 
            // If there is to click on the page to query based on a single page 
            page = Integer.valueOf (PageInfo); 
            itemsListGet.setP (String.valueOf (page)); 
            itemsListGetRequest = new new ItemsListGetRequest (); 
            itemsListGetRequest.setItemsListGet (itemsListGet); 
            = sdkClient.excute Result (itemsListGetRequest); 

            updatetimeStrs = new String[page * 20];
            datatypeStrs = new new String [Page 20 is *]; 
            System.out.println ( "returned message" + result.getBody ());
            int count = countStr(result.getBody(),"<itemID><![CDATA[");
            ids = new String[count]; //查询具体某一页的数据
            int[] indexbegin = new int[1000000];
            int[] indexbegin22 = new int[1000000];
            int[] indexbegin33 = new int[1000000];
            for(int i=1;i<=count;i++){
                indexbegin[i-1] = getIndex(result.getBody(),i,"<itemID>");
                indexbegin22[i - 1] = getIndex(result.getBody(), i, "<updateTime>");
                indexbegin33[i - 1] = getIndex(result.getBody(), i, "<datatype>");
            }
            int[] indexend = new int[1000000];
            int[] indexend22 = new int[1000000];
            int[] indexend33 = new int[1000000];
            for(int i=1;i<=count;i++){
                indexend[i-1] = getIndex(result.getBody(),i,"</itemID>");
                indexend22[i - 1] = getIndex(result.getBody(), i, "</updateTime>");
                indexend33[i - 1] = getIndex(result.getBody(), i, "</datatype>");
            }
            for(int i=0;i<count;i++){
                int index1 = 0;
                int index2 = 0;
                int index41 = 0;
                int index42 = 0;
                int index31 = 0;
                int index32 = 0;
                index1 = indexbegin[i];
                index2 = indexend[i];
                ids[i]  = result.getBody().substring(index1+17,index2-3);

                index41 = indexbegin22[i];
                index42 = indexend22[i];
                updatetimeStrs[i] = result.getBody().substring(index41 + 21, index42 - 3);

                index31 = indexbegin33[i];
                index32 = indexend33[i];
                datatypeStrs[i] = result.getBody().substring(index31 + 19, index32 - 3);
            }
        }
        String returnstr = "";
        //存储ids.length条信息
        String[] strs = new String[ids.length];
        List<ItemVO> listVO = new ArrayList<ItemVO>();
        System.out.println("id个数"+ids.length);
        for (int I = 0; I <ids.length; I ++) { 
            IF (!! null && IDS [I] IDS = [I] .equals ( "undefined")) { 
                String ID = IDS [I]; 
                // The Id get merchandise item information, including the 
                // item ID Image product name store name Dangdang stock price state audit status was last modified 
                itemVO itemVO = new new itemVO (); 
                // Approval status and last modified time to get ItemList 
                itemVO.setCheckstate ( datatypeStrs [I]); 
                itemVO.setLastupdatetime (updatetimeStrs [I]); 
                itemVO.setStorename (StoreName); 
                // image Item name product ID shop name coupons stock price to the interface state acquiring Item 
                ItemGetRequest new new ItemGetRequest Request = (); 
                ItemGet get = new ItemGet (); 
                get.setIt (the above mentioned id); 
                request.setItemsGet (gET);
                ItemGetResponse re = sdkClient.excute(request);

                //开始解析单个的商品
                String itemInfoStr = re.getBody();
                System.out.println("查询到的商品返回信息"+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(Float.parseFloat(unitPrice));
                String stockCount = getAttribute(itemInfoStr, "<stockCount>", "</stockCount>");
                itemVO.setStockCount(Integer.parseInt(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();
            }
        }
        returnstr+="@"+pageSize;
        System.out.println("return数据:"+returnstr);
        return  returnstr;
    }

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

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

  

Guess you like

Origin www.cnblogs.com/Koaler/p/12030182.html