1

KSoap2 ライブラリを使用していますが、Web サービスには次の 2 つの可能性があります。

1)このようなものを返します

  -<Services> 
       -<Service> 
           <id>12</id> 
           <function_code>2</function_code>  
           <cf>AABBBCCCAAA</cf> 
           <active>0</active> <last_change_date>2012-07-12T16:00:34</last_change_date> 
        </Service> 
        -<Service> 
           <id>10</id> 
           <function_code>3</function_code>  
           <cf>ZZZZZYYYYYYKKKK</cf> 
           <active>0</active> <last_change_date>2012-08-08T16:00:34</last_change_date> 
        </Service> 
    </Services>

これは Service オブジェクトの配列です。

2) またはこれを返します:

    <Msg>error: user not found</Msg>

サーバー側のエラーの場合。

明らかに、Web サービスの答えがどうなるかはわかりません。解析のために2つの異なる方法を実装しました。どの解析方法を使用する必要があるかをどのように判断できますか? エラー メッセージを受け取ったときに最初の構造体を待機する解析メソッドを作成すると、正しく解析できません。受信したメッセージが 1 番目または 2 番目の構造を持っている場合、アプリオリに評価できますか?

ps: KvmSerializable クラスを使用したくありません。

4

1 に答える 1

0

View XML Like で XML 文字列を取得する方法

public void viewXML(String xmlStr) throws IOException{
        try{
            byte[] xmlByteArray=xmlStr.getBytes();
            ByteArrayInputStream xmlStream=new ByteArrayInputStream(xmlByteArray);
            InputStreamReader xmlReader=new InputStreamReader(xmlStream);
            XmlParser parser=new XmlParser(xmlReader);
            try{
                traverse(parser,"");
            }
            catch(Exception exc){
                exc.printStackTrace();
            }
            return;
        }
        catch(IOException e){
            return;
        }
    }

トラヴェリーズ・イット・ライク

public void traverse(XmlParser parser,String indent) throws Exception{
        boolean leave=false;
        String sValue="";
        do{
            ParseEvent event=parser.read();
            ParseEvent pe;
            switch(event.getType()){
                case Xml.START_TAG:
                    if("id".equals(event.getName())){
                        pe=parser.read();
                        sValue=pe.getText()+"~~";
                    }
                    if("function_code".equals(event.getName())){
                        pe=parser.read();
                        sValue=sValue+pe.getText()+"~~";
                    }
                    if("cf".equals(event.getName())){
                        pe=parser.read();
                        sValue=sValue+pe.getText()+"~~";
                    }
                    if("active".equals(event.getName())){
                        pe=parser.read();
                        sValue=sValue+pe.getText()+"~~";
                    }
                    traverse(parser,"");
                    break;
                case Xml.END_TAG:
                    leave=true;
                    break;
                case Xml.END_DOCUMENT:
                    leave=true;
                    break;
                case Xml.TEXT:
                    break;
                case Xml.WHITESPACE:
                    break;
                default:
            }
        }while(!leave);
    }
Check This Out
于 2012-09-04T08:49:42.937 に答える