解析Android中使用ksoap2 SOAP响应? [英] Parsing soap response in android using ksoap2?
问题描述
我正在connecnting到网上互联网服务和我能够得到响应。我需要使用ksoap2解析此响应。我试着用SAX解析器,我能够解析it.please帮助我如何使用ksoap2解析XML
这是我的回应XML
<字符串的xmlns =http://www.webserviceX.NET/>
< StockQuotes>
<股票及GT;
<符号与GT; M< /符号与GT;
<最后>及39.86 LT; /尾>
<日期和GT 11 /二千零十二分之二十六< /日期和GT;
&所述;时间&gt; 4:02 pm< /时间&gt;
&lt;改变&GT;&-1.87 LT; /变化与GT;
&LT;开和GT;&41.00 LT; /打开&GT;
&LT;高&GT;及41.09 LT; /高&GT;
&LT;低&GT;及39.65 LT; /低&GT;
&LT;音量和GT; 7968614&LT; /音量&GT;
&LT;&市值GT; 15.765B&LT; /&市值GT;
&LT; previousClose&GT;及41.73 LT; / previousClose&GT;
&LT; PercentageChange&GT; -4.48%LT; / PercentageChange&GT;
&LT; AnnRange&GT; 30.38 - 42.17&LT; / AnnRange&GT;
&LT;荣获&GT;&3.227 LT; /荣获&GT;
&LT; P-E&GT;及12.93 LT; / P-E&GT;
&LT;名称&gt;梅西公司通用和LT; /名称&gt;
&LT; /股票及GT;
&LT; / StockQuotes&GT;
&LT; /串&GT;
我粘贴我使用的解析来自Ksoap2结果样本code
耗时.NET Web服务。我希望它帮助。
与数据类型这样创建一个类:
进口org.ksoap2.serialization.KvmSerializable;
进口org.ksoap2.serialization.PropertyInfo;公共类Provincias实现KvmSerializable { 公众诠释GCPRV;
公共字符串GDPRV;
公众诠释GFCTB; 公共Provincias(){}
公共Provincias(INT gcprv,字符串gdprv,INT gfctb)
{
this.GCPRV = gcprv;
this.GDPRV = gdprv;
this.GFCTB = gfctb;
} @覆盖
公共对象的getProperty(INT为arg0){
开关(为arg0)
{
情况下0:
返回GCPRV;
情况1:
返回GDPRV;
案例2:
返回GFCTB;
} 返回null;
} @覆盖
公众诠释getPropertyCount(){
返回3;
} @覆盖
公共无效为getPropertyInfo(INT指数,Hashtable的ARG1,信息的PropertyInfo){
开关(指数)
{
情况下0:
info.type = PropertyInfo.INTEGER_CLASS;
info.name =GCPRV;
打破;
情况1:
info.type = PropertyInfo.STRING_CLASS;
info.name =GDPRV;
打破;
案例2:
info.type = PropertyInfo.INTEGER_CLASS;
info.name =GFCTB;
打破;
默认:打破;
} }
一旦你有你SoapObject响应,你只需要查询它的propertis
并将其绑定到你的类是这样的:
Provincias [] =省新Provincias [ObjetoSoap.getPropertyCount()];
的for(int i = 0; I&LT; prov.length;我++){
SoapObject PII =(SoapObject)ObjetoSoap.getProperty(I)
Provincias省报=新Provincias();
provincia.GCPRV =的Integer.parseInt(pii.getProperty(0)的ToString());
provincia.GDPRV = pii.getProperty(1)的ToString();
provincia.GFCTB =的Integer.parseInt(pii.getProperty(2)的ToString());
省[I] =省报;
}
编辑:在这里,你有方法说明:
HTTP / 1.1 200 OK
内容类型:文本/ xml的;字符集= UTF-8
内容长度:长度&LT; XML版本=1.0编码=UTF-8&GT?;
&LT;肥皂:信封的xmlns:XSI =http://www.w3.org/2001/XMLSchema-instance的xmlns:XSD =http://www.w3.org/2001/XMLSchema中的xmlns:SOAP = http://schemas.xmlsoap.org/soap/envelope/\">
&LT;肥皂:身体与GT;
&LT; Cargar_Provincias_JavaResponse的xmlns =http://tempuri.org/&GT;
&LT; Cargar_Provincias_JavaResult&GT;
&LT; Provincias_Class&GT;
&LT; GCPRV&GT;&LT INT; / GCPRV&GT;
&LT; GDPRV&GT;串LT; / GDPRV&GT;
&LT; GFCTB&GT;&LT INT; / GFCTB&GT;
&LT; / Provincias_Class&GT;
&LT; Provincias_Class&GT;
&LT; GCPRV&GT;&LT INT; / GCPRV&GT;
&LT; GDPRV&GT;串LT; / GDPRV&GT;
&LT; GFCTB&GT;&LT INT; / GFCTB&GT;
&LT; / Provincias_Class&GT;
&LT; / Cargar_Provincias_JavaResult&GT;
&LT; / Cargar_Provincias_JavaResponse&GT;
&LT; / SOAP:身体与GT;
&LT; / SOAP:信封&GT;
i am connecnting to a online webservice and am able to get the response. i need to parse this response using the ksoap2. i tried with SAX parser and i am able to parse it.please help me on how to parse the xml using ksoap2
this is my response xml
<string xmlns="http://www.webserviceX.NET/">
<StockQuotes>
<Stock>
<Symbol>M</Symbol>
<Last>39.86</Last>
<Date>11/26/2012</Date>
<Time>4:02pm</Time>
<Change>-1.87</Change>
<Open>41.00</Open>
<High>41.09</High>
<Low>39.65</Low>
<Volume>7968614</Volume>
<MktCap>15.765B</MktCap>
<PreviousClose>41.73</PreviousClose>
<PercentageChange>-4.48%</PercentageChange>
<AnnRange>30.38 - 42.17</AnnRange>
<Earns>3.227</Earns>
<P-E>12.93</P-E>
<Name>Macy's Inc Common</Name>
</Stock>
</StockQuotes>
</string>
I paste you a sample code I am using to parse results from Ksoap2 consuming .NET webservices. I hope it help.
Create a class with the data types like this:
import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo;
public class Provincias implements KvmSerializable {
public int GCPRV;
public String GDPRV;
public int GFCTB;
public Provincias(){}
public Provincias(int gcprv, String gdprv, int gfctb)
{
this.GCPRV=gcprv;
this.GDPRV=gdprv;
this.GFCTB=gfctb;
}
@Override
public Object getProperty(int arg0) {
switch(arg0)
{
case 0:
return GCPRV;
case 1:
return GDPRV;
case 2:
return GFCTB;
}
return null;
}
@Override
public int getPropertyCount() {
return 3;
}
@Override
public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {
switch(index)
{
case 0:
info.type = PropertyInfo.INTEGER_CLASS;
info.name = "GCPRV";
break;
case 1:
info.type = PropertyInfo.STRING_CLASS;
info.name = "GDPRV";
break;
case 2:
info.type = PropertyInfo.INTEGER_CLASS;
info.name = "GFCTB";
break;
default:break;
}
}
Once you have your SoapObject response, you just need to query it's propertis and bind them to your class like this:
Provincias[] prov = new Provincias[ObjetoSoap.getPropertyCount()];
for (int i = 0; i < prov.length; i++) {
SoapObject pii = (SoapObject)ObjetoSoap.getProperty(i);
Provincias provincia = new Provincias();
provincia.GCPRV=Integer.parseInt(pii.getProperty(0).toString());
provincia.GDPRV =pii.getProperty(1).toString();
provincia.GFCTB=Integer.parseInt(pii.getProperty(2).toString());
prov[i] = provincia;
}
EDIT: Here you have the method description:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Cargar_Provincias_JavaResponse xmlns="http://tempuri.org/">
<Cargar_Provincias_JavaResult>
<Provincias_Class>
<GCPRV>int</GCPRV>
<GDPRV>string</GDPRV>
<GFCTB>int</GFCTB>
</Provincias_Class>
<Provincias_Class>
<GCPRV>int</GCPRV>
<GDPRV>string</GDPRV>
<GFCTB>int</GFCTB>
</Provincias_Class>
</Cargar_Provincias_JavaResult>
</Cargar_Provincias_JavaResponse>
</soap:Body>
</soap:Envelope>
这篇关于解析Android中使用ksoap2 SOAP响应?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!