1

我正在使用 KSoap2 库,我的网络服务有两种可能性:

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>

那是一个服务对象数组。

2)或返回这个:

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

在服务器端错误的情况下。

显然我不知道网络服务的答案是什么;我已经实现了两种不同的解析方法。如何决定必须使用哪种解析方法?如果我创建一个在收到错误消息时等待第一个结构的解析方法,我将无法正确解析。如果收到的消息具有第一个或第二个结构,我可以先验评估吗?

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

和它喜欢的Traverese

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 回答