2015-05-05 71 views
0

我無法解析.net web服務中的soap響應,我得到兩種類型的響應,一種是我已解析它的任何類型格式,但現在我需要解析下面的xml使用diffgram解析複雜的SOAP響應

<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> 
     <GetReminderResponse xmlns="http://tempuri.org/"> 
     <GetReminderResult> 
      <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
       <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
        <xs:complexType> 
        <xs:choice minOccurs="0" maxOccurs="unbounded"> 
         <xs:element name="Table"> 
          <xs:complexType> 
           <xs:sequence> 
           <xs:element name="RemMessage" type="xs:string" minOccurs="0"/> 
           <xs:element name="InvM_Id" type="xs:int" minOccurs="0"/> 
           <xs:element name="DocType" type="xs:int" minOccurs="0"/> 
           <xs:element name="PrmR_TypeId" type="xs:int" minOccurs="0"/> 
           <xs:element name="PrmR_Id" type="xs:int" minOccurs="0"/> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
        </xs:choice> 
        </xs:complexType> 
       </xs:element> 
      </xs:schema> 
      <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
       <NewDataSet xmlns=""> 
        <Table diffgr:id="Table1" msdata:rowOrder="0"> 
        <RemMessage>Exeed Discount Limit on Invoice dated on 04/05/2015 for ANDREA NORONHA , from 3 - Lokhandwala Showroom</RemMessage> 
        <InvM_Id>78455</InvM_Id> 
        <DocType>3</DocType> 
        <PrmR_TypeId>3</PrmR_TypeId> 
        <PrmR_Id>2213</PrmR_Id> 
        </Table> 
        <Table diffgr:id="Table2" msdata:rowOrder="1"> 
        <RemMessage>Exeed Discount Limit on Invoice dated on 04/05/2015 for ADITI SHAH , from 3 - Lokhandwala Showroom</RemMessage> 
        <InvM_Id>78456</InvM_Id> 
        <DocType>3</DocType> 
        <PrmR_TypeId>3</PrmR_TypeId> 
        <PrmR_Id>2214</PrmR_Id> 
        </Table> 
       </NewDataSet> 
      </diffgr:diffgram> 
     </GetReminderResult> 
     </GetReminderResponse> 
    </soap:Body> 
</soap:Envelope> 

回答

4

在您的Soap-response中有數據類型的模式,對我來說這完全是奇怪的。但是我已經構建了忽略xs:schema部分的代碼,並創建了一系列GetReminder對象(從上一篇文章中提取的類型:How to parse diffgram anytype response from .net webservice)。我認爲,更好的主意是在結構創建KVMSerializables但低於它的工作方式太偉大;)

ArrayList<GetReminder> lst = new ArrayList<GetReminder>(); 
    if(envelope.bodyIn instanceof SoapObject && envelope.bodyIn!=null){ 
     SoapObject so=(SoapObject)envelope.bodyIn; 
     if(so.hasProperty("GetReminderResult")){ 
      SoapObject so1 = (SoapObject) so.getProperty("GetReminderResult"); 
      if(so1.hasProperty("diffgram")){ 
       SoapObject soDiffg = (SoapObject) so1.getProperty("diffgram"); 
       if(soDiffg.hasProperty("NewDataSet")){ 
        SoapObject soNDSet = (SoapObject) soDiffg.getProperty("NewDataSet"); 

        for (int i = 0; i < soNDSet.getPropertyCount(); i++) { 
         SoapObject soRem = (SoapObject) soNDSet.getProperty(i); 
         GetReminder reminder = new GetReminder(); 

         if (soRem.hasProperty("RemMessage")) { 
          reminder.setRemMessage(soRem.getPropertyAsString("RemMessage")); 
         } 
         if (soRem.hasProperty("InvM_Id")) { 
          reminder.setInvM_Id(Integer.valueOf(soRem.getPropertyAsString("InvM_Id"))); 
         } 
         if (soRem.hasProperty("DocType")) { 
          reminder.setDocType(Integer.valueOf(soRem.getPropertyAsString("DocType"))); 
         } 
         if (soRem.hasProperty("PrmR_TypeId")) { 
          reminder.setPrmR_TypeId(Integer.valueOf(soRem.getPropertyAsString("PrmR_TypeId"))); 
         } 
         if (soRem.hasProperty("PrmR_Id")) { 
          reminder.setPrmR_Id(Integer.valueOf(soRem.getPropertyAsString("PrmR_Id"))); 
         } 

         lst.add(reminder); 
        } 
       } 
      } 
     } 
    } 

    System.out.println(lst.size()); 

問候,馬爾辛 -

+0

謝謝,我已經anytype類型的反應只是現在的工作。 – jenil