2015-10-04 84 views
0

任何人都可以帮助我用ksoap2解析这个xml吗?使用kso​​ap2解析XML

<s:Envelope 
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
<s:Body> 
    <GetTurnoverResponse 
     xmlns="http://tempuri.org/"> 
     <GetTurnoverResult 
       xmlns:a="http://schemas.datacontract.org/2004/07/blablabla" 
      xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <a:Turnover> 
       <a:Amount>369.2000000</a:Amount> 
       <a:CurrencyID i:nil="true"/> 
       <a:DateAndTime>2010-10-01T10:00:00</a:DateAndTime> 
       <a:ForeignAmount>461.50</a:ForeignAmount> 
       <a:ForeignCurrencyID>Euro</a:ForeignCurrencyID> 
       <a:StoreNumber>101</a:StoreNumber> 
      </a:Turnover> 
</GetTurnoverResult> 
    </GetTurnoverResponse> 
</s:Body> 
</s:Envelope> 

我不确定实际上我是否收到任何回复。因此我无法解析它。

请求XML是象下面这样:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/" xmlns:ns2="http://schemas.datacontract.org/2004/07/ProFashionAllServices"> 
    <SOAP-ENV:Body> 
    <ns1:GetTurnover> 
    <ns1:sessionID>12674579771167587539</ns1:sessionID> 
    <ns1:selection> 
    <ns2:EndDate>2010-10-01</ns2:EndDate> 
    <ns2:StartDate>2010-10-01</ns2:StartDate> 
    </ns1:selection> 
    </ns1:GetTurnover> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

我的要求是这样的:

public class LoadData extends AsyncTask<String, String, Void> { 

private static final String SOAP_ACTION = "http://tempuri.org/ITurnoverService/GetTurnover"; 
private static final String METHOD_NAME = "GetTurnover"; 
private static final String NAMESPACE = "http://tempuri.org/"; 
private String response; 
private boolean network; 

private Context mContext; 

public LoadData(Context context) { 
    mContext = context; 
} 
@Override 
protected void onPostExecute(Void result) { 
    super.onPostExecute(result); 
    Toast toast = Toast.makeText(mContext, response, Toast.LENGTH_LONG); 
    toast.show(); 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
} 

@Override 
protected Void doInBackground(String... arg0) { 

    //String conString = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getString("url", "http://wsa.pfagroup.nl:1662/OOPServices/"); 
    String URL = "http://wsa.pfagroup.nl:1662/OOPServices/" +"TurnoverService.svc"; 

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
    request.addProperty("sessionID", arg0[0]); 
    request.addProperty("EndDate", arg0[1]); 
    request.addProperty("StartDate", arg0[1]); 

    Log.i("doINaaaaaaaaaaaa", arg0[1]); 
    Log.i("doINaaaaaaaaaaaa", arg0[0]); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.setOutputSoapObject(request); 
    envelope.dotNet = true; 
    HttpTransportSE httpTransport = new HttpTransportSE(URL); 

    httpTransport.debug = true; 
    try { 
     httpTransport.call(SOAP_ACTION, envelope); 
     network = true; 
    } catch (HttpResponseException e) { 
     // TODO Auto-generated catch block 
     Log.e("HTTPAAAAA", e.getMessage()); 
     //e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     Log.e("IOAAAAA", e.getMessage()); 
     response = "Check Your Network Connection"; 
     network = false; 
     //e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
     // TODO Auto-generated catch block 
     Log.e("XMLAAAAA", e.getMessage()); 
     //e.printStackTrace(); 
    } //send request 

    if(network){ 
     SoapObject result = null; 
     try { 
      result = (SoapObject)envelope.getResponse(); 
      //response = result.getProperty("GetTurnoverResult").toString(); 
      Log.i("responseeeeeeeeee",String.valueOf(result.getPropertyCount())); 
     } catch (SoapFault e) { 
      // TODO Auto-generated catch block 
      Log.e("SOAPAAAA", e.getMessage()); 
      //e.printStackTrace(); 
     } 
    } 

    return null; 
} 

}

了在logcat的显示

错误消息:

18610-18895/com.******.*** E/SOAPAAAA﹕ De server kan de aanvraag niet verwerken als gevolg van een interne fout. Voor meer informatie over de fout kunt u IncludeExceptionDetailInFaults inschakelen (vanuit ServiceBehaviorAttribute of vanuit het configuratiegedrag <serviceDebug>) voor de server zodat de uitzonderingsgegevens naar de client worden teruggestuurd, of u kunt tracering inschakelen. Raadpleeg hiertoe de documentatie van Microsoft .NET Framework SDK en controleer de traceringslogboeken voor de server. 

是我的要求错误?请帮助

回答

0

您的请求未设置为名称空间。创建PropertyInfo并将名称空间,类型,名称和值设置为PropertyInfo。并添加此对象以请求。你必须这样做所有三个参数

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
PropertyInfo p = new PropertyInfo(); 
p.setNamespace(NAMESPACE); 
p.setType(PropertyInfo.STRING_CLASS); 
p.setName("sessionID"); 
p.setValue(arg0[0]); 
request.addProperty(p); 

SoapObject selection = new SoapObject(NAMESPACE,"selection"); 
PropertyInfo EndDate = new PropertyInfo(); 
EndDate.setNamespace("http://schemas.datacontract.org/2004/07/ProFashionAllServices"); 
EndDate.setType(PropertyInfo.STRING_CLASS); 
EndDate.setValue("2010-10-01"); 
selection.addProperty(EndDate); 

PropertyInfo StartDate = new PropertyInfo(); 
StartDate .setNamespace("http://schemas.datacontract.org/2004/07/ProFashionAllServices"); 
StartDate .setType(PropertyInfo.STRING_CLASS); 
StartDate .setValue("2010-10-01"); 
selection.addProperty(StartDate); 

request.addSoapObject(selection); 
+0

nope。找不到SoapObject.setNamespace方法。但我想我是连续添加三个属性。但是这些是嵌套的。 StartDate和EndDate在sessionID属性中。这是一个问题? – abidsplanet

+0

对不起,这个函数在propertyinfo中。我正在更新我的答案 – Adem

+0

这也不起作用。同样的错误。但我想我是连续添加三个属性。但是这些是嵌套的。 StartDate和EndDate在sessionID属性中。这是一个问题? – abidsplanet

相关问题