使用Android中的Ksoap2库管理Web Service返回的不同结构



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

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>

以防服务器端错误。

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

p.s.:我不想使用KvmSerializable类。

如何在视图中获取XML字符串XMLLike

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

Traveree就像

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

最新更新