我正在使用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>
这是一个Service对象数组。
2)或者返回:
<Msg>error: user not found</Msg>
如果服务器端出错。
显然我不知道Web服务的答案是什么;我已经实现了两种不同的解析方法。如何确定必须使用哪种解析方法?如果我在收到错误消息时创建一个等待第一个结构的解析方法,我无法正确解析。 如果收到的消息有第一个或第二个结构,我可以评估先验吗?
p.s。:我不想使用KvmSerializable类。
答案 0 :(得分:0)
如何在View XML中获取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