直接贴一段业务代码,这段代码是解析请求返回的xml格式字符串,为了取出其中的值便于下一步的使用。
@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); }else{ System.out.println("找不到店铺:店铺名字为空"); } ItemsListGet itemsListGet=new ItemsListGet(); //开始设置查询条件,有的参数就设置,没有就不设置 if(typenumber!=null && !typenumber.equals("")){ itemsListGet.setItm(typenumber); } if(mts!=null && !mts.equals("")){ itemsListGet.setMts(mts); } if(mte!=null && !mte.equals("")){ itemsListGet.setMte(mte); } if(ocdsupport!=null && !ocdsupport.equals("")){ 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["); index22 = result.getBody().indexOf("]]></pageTotal>"); pageSize = result.getBody().substring(index11 + 20, index22); int page = Integer.valueOf(pageSize); System.out.println("总页码"+pageSize); // 将页码控制在10页,其他的点击页面11页,才调用 if (page >= 1) { page = 1; } //如果没有点击页码,就按照这个查询 if(pageInfo !=null && !pageInfo.equals("") && pageInfo.equals("0")) { int insertIndex = 0; //如果没有传入PageInfo,默认第一页。 for (int pageindex = 1; pageindex <= page; pageindex++) { itemsListGet.setP(String.valueOf(pageindex)); itemsListGetRequest = new ItemsListGetRequest(); itemsListGetRequest.setItemsListGet(itemsListGet); result = sdkClient.excute(itemsListGetRequest); System.out.println("返回的信息"+result.getBody()); 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().substring(index31 + 19, index32 - 3); } } }else if(pageInfo !=null && !pageInfo.equals("") && !pageInfo.equals("0")){ //如果有点击页码就根据页码单页查询 page = Integer.valueOf(pageInfo); itemsListGet.setP(String.valueOf(page)); itemsListGetRequest = new ItemsListGetRequest(); itemsListGetRequest.setItemsListGet(itemsListGet); result = sdkClient.excute(itemsListGetRequest); updatetimeStrs = new String[page * 20]; datatypeStrs = new String[page * 20]; System.out.println("返回的信息"+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(ids[i]!=null&&!ids[i].equals("undefined")) { 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(); 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; }