Javaは、XXXが取ら値であるXML文字列を、解析<AAAA> <![CDATA [(XXX)]]> </ AAA>最も単純な文字列解析は、他の方法のXML解析に使用することができます

次へ戻っ解決要求xml形式の文字列で、使用を容易に値をとるダイレクトビジネスコードを、投稿。

@RequestMapping(値= "/検索"を生成= { "text / htmlの;のcharset = UTF-8"})
    パブリック文字列searchGoods(@RequestParam(値= "itemBarCode"、必須= FALSE)文字列itemBarCode、
                           @RequestParam(値= "Type番号"、必須=偽)は、文字列Type番号、
                           = falseを必要@RequestParam(値= "MTS")文字列MTS、
                           @RequestParam(値= "MTE"、必須=偽)は、文字列MTE、
                           @RequestParam(値=」 ocdsupport "必須=偽)は、文字列ocdsupport、
                           @RequestParam(値= "yunfeimoban"、必須=偽)は、文字列yunfeimoban、
                           @RequestParam(値="goodsname」、必要= false)の文字列goodsname、
                           @RequestParam(値= "goodstate"、必須=偽)は、文字列goodstate、 
                           @RequestParam(値=」namelabel「が必要= false)の文字列namelabel、
                           @RequestParam(値= "kucun2"、必須=偽)は、文字列kucun2、
                           @RequestParam(値= "kucun1"、必須=偽)は、文字列kucun1、
                           @RequestParam(値= "バーコード"、必須=偽)は、文字列、バーコード、
                           @RequestParam (値= "タイプ"、必須=偽)は、文字列型、
                           @RequestParam(値= "innertype"、必須=偽)は、文字列innertype、
                           @RequestParam(値= "storenumber"、必須=偽)は、文字列storenumber、
                           @RequestParam(値= "にcheckState"、必須= false)を文字列にcheckState、
                           @RequestParam(値=」StoreNameを」、必要= false)の文字列のStoreNameを、
                           @RequestParam(値= "pageInfo"、必須= FALSE)文字列pageInfoは)にApiException {スロー
        )StoreKeyInfo storeKeyInfo = storeKeyInfoService.getStoreKeyInfo(StoreNameをします。
        地図<整数、文字列>にマッピング=新しいHashMapの<整数、文字列>(); 
        SdkClient sdkClient = NULL; 
        (もし!storeKeyInfo = NULL){ 
            文字列APPKEY = storeKeyInfo.getAppKey(); 
            ストリングappSecret = storeKeyInfo.getAppSecret()。
            ストリングセッション= storeKeyInfo.getAuthenCode()。
            sdkClient =新しいSdkClient(APPKEY、appSecret、セッション、バージョン、フォーマット、
                    connecttimeout、readTimeout、needEnableParser、needCheckRequest)。
        } {他
            のSystem.out.println( "找不到店铺:店铺名字为空")。
        }
        ItemsListGet itemsListGet =新しいItemsListGet(); 
        //开始设置查询条件、有的参数就设置、没有就不设置

        場合(!Type番号= NULL && typenumber.equals( "")){ 
            itemsListGet.setItm(Type番号)。
        } 
        (MTS = NULL && mts.equals( "")!){もし
            itemsListGet.setMts(MTS)。
        } 
        IF(MTE = NULL && mte.equals( "")!){ 
            itemsListGet.setMte(MTE)。
        } 
        IF(ocdsupport = NULL && ocdsupport.equals( "!")){ 
        IF(goodsname = NULL && goodsname.equals(! "")){ 
            itemsListGet.setName(goodsname)。
        } 
        場合(goodstate!)){ 
            itemsListGet.setIs_cod(ocdsupport)。
        } 
            itemsListGet.setIts(goodstate)。
        } 
        IF(!kucun1 = NULL && kucun1.equals( "")){ 
            itemsListGet.setSlv(kucun1)。
        } 
        IF(!kucun2 = NULL && kucun2.equals( "")){ 
            itemsListGet.setShv(kucun2)。
        } 
        IF(バー= NULL && barcode.equals( "")!){ 
            itemsListGet.setBar_code(バーコード)。
        } 
        IF(!innertype = NULL && innertype.equals( "")){ 
            itemsListGet.setSc(innertype)。
        } 
        IF(!namelabel = NULL && namelabel.equals( "")){ 
            itemsListGet.setItb(namelabel)。
        もし(!!にcheckState = NULL && checkstate.equals( "")){
        index11 = result.getBody()のindexOf( "<pageTotal> <[CDATA [!")。
            itemsListGet.setDatatype(にcheckState)。
        } 
        ItemsListGetRequest itemsListGetRequest =新しいItemsListGetRequest()。
        itemsListGetRequest.setItemsListGet(itemsListGet)。
        ItemsListGetResponse結果= sdkClient.excute(itemsListGetRequest)。

        文字列[] IDS = NULL; 
        文字列[] updatetimeStrs = NULL; 
        文字列[] datatypeStrs = NULL; 
        文字列のpageSize = NULL; 
        int型index11 = 0; 
        int型index22 = 0; 
        System.out.println( "返回的数据是:" + result.getBody()); 
        index22 = result.getBody()のindexOf( "]]> </ pageTotal>")。
        。のpageSize = result.getBody()サブストリング(index11 + 20、index22)。
        ページInteger.valueOf = INT(pageSizeを); 
        System.out.printlnは( "総ページ" + pageSizeを); 
        //ページ10ページコントロールで、唯一と呼ばれる、他のページ11をクリックしてください
        (ページ> = 1)場合には{ 
            。= 1ページ; 
        } 
        //がない場合はクリックしてページ、クエリに応じて
        IF(!= nullの&& PageInfo pageInfo.equals( "")&& pageInfo.equals( "0")){ 

            int型InsertIndex = 0; //もしいいえ、着信PageInfo、デフォルトの最初のページ。
            用(INT 1 = pageIndexパラメータ; pageIndexパラメータ<=ページ; pageIndexパラメータ++){ 
                itemsListGet.setP(String.valueOf(pageIndexパラメータ)); 
                結果= sdkClient.excute(itemsListGetRequest)
                のSystem.out.println( "
                itemsListGetRequest.setItemsListGet(itemsListGet)。
                int型のカウント= countStr(result.getBody()、 "<ITEMID> <[CDATA [!"); 

                IDS =新しいString [回数]。
                updatetimeStrs =新しいString [回数]。
                datatypeStrs =新しいString [回数]。

                INT [] indexbegin =新しいint型[1000000]。
                INT [] indexbegin2 =新しいint型[1000000]。
                INT [] indexbegin3 =新しいint型[1000000]。
                以下のために(INT I 1 =、iが<=カウント; I ++){ 
                    indexbegin [I - 1] = getIndex(result.getBody()、I、 "<アイテムID>"); 
                    indexbegin2 [I - 1] = getIndex(result.getBody()、I、 "<updateTime>");
                    indexbegin3 [I - 1] = getIndex(result.getBody()、I、 "<データ型>"); 
                } 
                INT [] indexendは=新しいINT [1000000]。
                INT [] indexend2 =新しいint型[1000000]。
                INT [] indexend3 =新しいint型[1000000]。
                以下のために(INT I 1 =、iが<=カウント; I ++){ 
                    indexend [I - 1] = getIndex(result.getBody()、I、 "</アイテムID>"); 
                    indexend2 [I - 1] = getIndex(result.getBody()、I、 "</ updateTime>"); 
                    indexend3 [I - 1] = getIndex(result.getBody()、I、 "</データ型>"); 
                } 

                {(insertIndex ++; - - (pageIndexパラメータ1)* 20 <カウントinsertIndex)のために
                    int型index41 = 0; 
                    int型index42 = 0; 
                    int型index31 = 0;
                    int型INDEX2 = 0; 
                    int型index32 = 0; 
                    インデックス1 = indexbegin [insertIndex - (pageIndexパラメータ- 1)* 20]。
                    INDEX2 = indexend [insertIndex - (pageIndexパラメータ- 1)* 20]。
                    。IDS [insertIndex] = result.getBody()サブストリング(index1の+ 17、INDEX2 - 3)。

                    index41 = indexbegin2 [insertIndex - (pageIndexパラメータ- 1)* 20]。
                    index42 = indexend2 [insertIndex - (pageIndexパラメータ- 1)* 20]。
                    。updatetimeStrs [insertIndex] = result.getBody()サブストリング(index41 + 21、index42 - 3)。

                    index31 = indexbegin3 [insertIndex - (pageIndexパラメータ- 1)* 20]。
                    index32 = indexend3 [insertIndex - (pageIndexパラメータ- 1)* 20]。
                    。datatypeStrs [insertIndex] = result.getBody()サブストリング(index31 + 19、index32 - 3)。
                } 
            } 

        }他の場合(pageInfo!= nullの&&!pageInfo.equals( "")&&!pageInfo.equals( "0")){ 
            //如果有点击页码就根据页码单页查询
            ページ= Integer.valueOf(pageInfo ); 
            itemsListGet.setP(String.valueOf(ページ))。
            itemsListGetRequestは新しいItemsListGetRequestを()=; 
            itemsListGetRequest.setItemsListGet(itemsListGet)。
            RESULT = sdkClient.excute(itemsListGetRequest)。

            updatetimeStrs =新しいString [ページ* 20]。
            datatypeStrs =新しいString [ページ* 20]。 
            のSystem.out.println( "返されたメッセージ" + result.getBody())。
            int型のカウント= countStr(result.getBody()、 "<ITEMID> <[CDATA [!"); 
            IDS =新しいString [回数]。//查询具体某一页的数据
            のint [] indexbegin =新しいint型[1000000]。
            INT [] indexbegin22 =新しいint型[1000000]。
            INT [] indexbegin33 =新しいint型[1000000]。
            以下のために(INT I 1 =、iが<=カウント; I ++){ 
                indexbegin [I-1] = getIndex(result.getBody()、I、 "<アイテムID>"); 
                indexbegin22 [I - 1] = getIndex(result.getBody()、I、 "<updateTime>"); 
                indexbegin33 [I - 1] = getIndex(result.getBody()、I、 "<データ型>");
            INT [] indexend22 =新しいint型[1000000]。
            以下のために(INT I 1 =、iが<=カウント; I ++){ 
                indexend [I-1] = getIndex(result.getBody()、I、 "</アイテムID>"); 
                indexend22 [I - 1] = getIndex(result.getBody()、I、 "</ updateTime>"); 
                indexend33 [I - 1] = getIndex(result.getBody()、I、 "</データ型>"); 
            } 
            ため(INT I 0 =; I <数; I ++){ 
                int型のインデックス1 = 0。
                int型INDEX2 = 0; 
                int型index41 = 0; 
                int型index42 = 0; 
                int型index31 = 0; 
                int型index32 = 0; 
                インデックス1 = indexbegin [I]。
                IDS [I] = result.getBody()サブストリング(index1の+ 17、index2-3)。

                index41 = indexbegin22 [I]。
                index42 = indexend22 [I]。
                updatetimeStrs [I] = result.getBody()サブストリング(index41 + 21、index42 - 3)。

                index31 = indexbegin33 [I]。
                index32 = indexend33 [I]。
                datatypeStrs [I] = result.getBody()サブストリング(index31 + 19、index32 - 3)。
            } 
        } 
        文字列returnstr = ""; 
        //存储ids.length条信息
        String []型STRS =新しいString [ids.length]。
        一覧<ItemVO> listVO =新しいのArrayList <ItemVO>(); 
        System.out.println( "ID个数" + ids.length)。
        {(I ++; I <ids.length iが0 = INT)のために
            IF(IDS [I] = NULL && IDS [I] .equals() "未定義" !!){ 
                文字列ID = IDS [I]; 
                //を含む同上に記載の商品情報の項目を取得する
                //ストアイメージアイテム名製品ID名前クーポン株価検証条件のステータスが最後に変更された
                itemVO itemVO新しい新itemVO =(); 
                //レビューステータスと最終更新時刻取得するITEMLIST 
                itemVO.setCheckstate(datatypeStrs [I]); 
                itemVO.setLastupdatetime(updatetimeStrs [I]); 
                itemVO.setStorename(StoreNameを); 
                //アイテムIDイメージ商品名店舗名をDangdangの株価が状態項目を取得するためにインターフェースに
                ItemGetRequest新しい新しいItemGetRequestを求める=(); 
                request.setItemsGet(GET)。 
                ItemGet =新しいItemGetを取得();
                get.setIt(ID)。
                ItemGetResponse再= sdkClient.excute(リクエスト)。

                //开始解析单个的商品
                ストリングitemInfoStr = re.getBody()。
                System.out.println( "查询到的商品返回信息" + re.getBody()); 
                ストリングのitemId =のgetAttribute(itemInfoStr、 "<アイテムID>"、 "</アイテムID>"); 
                itemVO.setStoreId(のitemId)。
                ストリングitemNameに=のgetAttribute(itemInfoStr、 "<itemNameに>"、 "</ itemNameに>"); 
                itemVO.setGoodsname(itemNameに)。
                ストリング単価=のgetAttribute(itemInfoStr、 "<単価>"、 "</単価>"); 
                itemVO。
                文字列stockCount =のgetAttribute(itemInfoStr、「<
                itemVO.setStockCount(Integer.parseInt(stockCount))。
                ストリングitemState =のgetAttribute(itemInfoStr、 "<itemState>"、 "</ itemState>"); 
                itemVO.setGoodstate(itemState)。
                //解析一下图片
                INT countpic = countStr(re.getBody()、 "<PIC")。
                文字列のpistrs = ""; 
                INT [] beginpic =新しいint型[countpic]。
                INT [] endpic =新しいint型[countpic]。
                {(H ++; H <= countpic INT H = 1)のために
                    、= getIndex(re.getBody()、H - beginpic [1 H]
                    endpic [H - 1] = getIndex(re.getBody()、H、 "</ PIC")。
                }  
                (INT J = 0; J <countpic。
                    INT end0 = endpic [J]。
                    pistrs + = re.getBody()サブストリング(begin0 + 15、end0 - 3)。
                } 
                itemVO.setPicture(pistrs)。
                IF(I <ids.length - 1)
                    returnstr + = itemVO.toString()+ "#"。
                    returnstr + = itemVO.toString(); 
            } 
        } 
        returnstr + = "@" +のpageSize。
        System.out.println( "復帰数据:" + returnstr)。
        returnstrを返します。
    }
 
    パブリック文字列のgetAttribute(列src、文字列のパターン1、パターン2文字列){ 
        文字列結果= NULL; 
        int型の値index1 = 0;
        int型INDEX2 = 0; 
        インデックス1 = src.indexOf(パターン1)。
        INDEX2 = src.indexOf(PATTERN2)。
        結果=(index2-3、9 + index1の+ pattern1.length())src.substring。
        結果を返します。
    } 

    getIndex int型のpublic static(文字列、int型I、文字列str){ 

        マッチャslashMatcher = Pattern.compile(STR).matcher(列)。
        int型MIDX = 0; 
        (slashMatcher.find()){一方
            MIDX ++。
            IF(MIDX == I){ 
                ブレーク。
            } 
        } 
        )(slashMatcher.startを返します。
    } 

    プライベートINT countStr(文字列str、文字列sToFind){ 
        int型NUM = 0。
        一方、(str.contains(sToFind)){ 
            STR = str.substring(str.indexOf(sToFind)+ sToFind.length())。
            NUM ++; 
        } 
        NUMを返します。
    }

  

おすすめ

転載: www.cnblogs.com/Koaler/p/12030182.html