2012-02-29 136 views
4

在响应由解析KSOAP响应

transport.call(SOAP_ACTION, envelope, headerList); 
在调试模式

responseDump我有这样的XML

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"><GetListItemsResult><listitems xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
    xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' 
    xmlns:rs='urn:schemas-microsoft-com:rowset' 
    xmlns:z='#RowsetSchema'> 
<rs:data ItemCount="5"> 
    <z:row ows_Attachments='0' ows_LinkTitle='testtask1' ows_Status='Not Started' ows_Priority='(2) Normal' ows_Predecessors='' ows__ModerationStatus='0' ows__Level='1' ows_Title='testtask1' ows_ID='1' ows_UniqueId='1;#{A6E41E02-46FD-4363-A4A3-440AF902B280}' ows_owshiddenversion='1' ows_FSObjType='1;#0' ows_Created_x0020_Date='1;#2012-02-28 09:55:49' ows_Created='2012-02-28 09:55:49' ows_FileLeafRef='1;#1_.000' ows_PermMask='0x7fffffffffffffff' ows_Modified='2012-02-28 09:55:49' ows_FileRef='1;#Lists/Tasks/1_.000' /> 
    <z:row ows_Attachments='0' ows_LinkTitle='testtask2' ows_Status='Not Started' ows_Priority='(1) High' ows_Predecessors='' ows__ModerationStatus='0' ows__Level='1' ows_Title='testtask2' ows_ID='2' ows_UniqueId='2;#{A320D923-8BC8-4341-B40A-4D39C1FB01DB}' ows_owshiddenversion='1' ows_FSObjType='2;#0' ows_Created_x0020_Date='2;#2012-02-28 09:55:58' ows_Created='2012-02-28 09:55:58' ows_FileLeafRef='2;#2_.000' ows_PermMask='0x7fffffffffffffff' ows_Modified='2012-02-28 09:55:58' ows_FileRef='2;#Lists/Tasks/2_.000' /> 
    <z:row ows_Attachments='0' ows_LinkTitle='testtask3' ows_Status='In Progress' ows_Priority='(2) Normal' ows_Predecessors='' ows__ModerationStatus='0' ows__Level='1' ows_Title='testtask3' ows_ID='3' ows_UniqueId='3;#{84071EBA-F38D-4EA9-A912-F8DD0088BD38}' ows_owshiddenversion='1' ows_FSObjType='3;#0' ows_Created_x0020_Date='3;#2012-02-28 09:56:07' ows_Created='2012-02-28 09:56:07' ows_FileLeafRef='3;#3_.000' ows_PermMask='0x7fffffffffffffff' ows_Modified='2012-02-28 09:56:07' ows_FileRef='3;#Lists/Tasks/3_.000' /> 
    <z:row ows_Attachments='0' ows_LinkTitle='testtask4' ows_Status='Waiting on someone else' ows_Priority='(3) Low' ows_Predecessors='' ows__ModerationStatus='0' ows__Level='1' ows_Title='testtask4' ows_ID='4' ows_UniqueId='4;#{AD6ED317-3F07-4998-89D2-38D8B6F0756E}' ows_owshiddenversion='1' ows_FSObjType='4;#0' ows_Created_x0020_Date='4;#2012-02-28 09:56:16' ows_Created='2012-02-28 09:56:16' ows_FileLeafRef='4;#4_.000' ows_PermMask='0x7fffffffffffffff' ows_Modified='2012-02-28 09:56:16' ows_FileRef='4;#Lists/Tasks/4_.000' /> 
    <z:row ows_Attachments='0' ows_LinkTitle='testtask5' ows_Status='Not Started' ows_Priority='(2) Normal' ows_Predecessors='' ows__ModerationStatus='0' ows__Level='1' ows_Title='testtask5' ows_ID='5' ows_UniqueId='5;#{50BC423F-E6A5-4719-B734-E528A08AE83B}' ows_owshiddenversion='1' ows_FSObjType='5;#0' ows_Created_x0020_Date='5;#2012-02-28 19:22:52' ows_Created='2012-02-28 19:22:52' ows_FileLeafRef='5;#5_.000' ows_PermMask='0x7fffffffffffffff' ows_Modified='2012-02-28 19:22:52' ows_FileRef='5;#Lists/Tasks/5_.000' /> 
</rs:data> 
</listitems></GetListItemsResult></GetListItemsResponse></soap:Body></soap:Envelope> 

但方法envelope.getResponse()以下

返回文本
anyType{listitems=anyType{data=anyType{row=anyType{}; row=anyType{}; row=anyType{}; row=anyType{}; row=anyType{}; }; }; } 

UPD1 我读了这个acticle,但它不是我的答案的解决方案。

好吧,我试图解析答案如下

transport.call(SOAP_ACTION2, envelope, headerList); // 1st step - call soap query 
SoapObject response = (SoapObject) envelope.getResponse(); 
SoapObject soapObject = (SoapObject) envelope.getResponse(); 
String title= null; 
    for (int i = 0; i < soapObject.getPropertyCount(); i++) { // soapObject.getPropertyCount() is only one (!!!!) 
     SoapObject resource = (SoapObject) response.getProperty(i); // in resource only this - anyType{data=anyType{row=anyType{}; row=anyType{}; row=anyType{}; row=anyType{}; row=anyType{}; }; } 
     title = resource.getAttribute("ows_Title").toString(); 
.... 
+0

您还可以详细说明您的确切问题是什么? – bvanvelsen 2012-02-29 14:24:22

+0

我可以从* String response = transport.responseDump; *捕获xml,但我应该怎么做下一步?或者我怎样才能解析这个字符串? – Gorets 2012-02-29 14:37:50

+0

我遇到了和你一样的问题,你现在是否解决了这个问题? – JacobChan 2013-05-10 08:11:03

回答

3

你尝试过这样的事情:

SoapObject soapObject = envelope.getResponse(); 
for (int i = 0; i < soapObject.getPropertyCount(); i++) { 
     SoapObject resource = (SoapObject) response.getProperty(i); 
     String uri = resource.getAttribute("uri").toString(); 
     String mimeType = resource.getAttribute("mimeType").toString(); 
     String size = resource.getAttribute("size").toString(); 
     String localURI = resource.getAttribute("localURI").toString(); 
     //do stuff 
}  

注:这是我用它来获取从列表属性的示例的资源

本示例循环显示响应SOAP对象的标记,并获取每个标记的3个已知属性,请参阅以下示例响应:

<resources xmlns="http://www.example.com/"> 
    <resource mimeType="text/xml" size="123456" uri="https://example.com/content/get.php?a123891" localURI="package.opf"/> 
    <resource mimeType="application/x-dtbncx+xml" size="123456" localURI="nav.ncx"/> 
</resources> 
+0

我理解了这个想法,但是我在* envelope.getResponse()*中有错误的数据(就像问题中的示例代码一样),这不允许我解析正确的数据。 – Gorets 2012-02-29 14:44:48

+0

@Gorets你可以像我的例子一样解析,将响应转换为'SoapObject'并循环遍历行,并解析它们的值...'toString'可能会给你一个'getResponse'为空的印象,但是可能不是这种情况,'toString'只是返回一个空字符串,也许 – bvanvelsen 2012-02-29 15:02:00

+0

我编辑了我的问题。我的错误在哪里? – Gorets 2012-03-01 09:01:27