用diffgram解析复杂的肥皂响应



我无法从.NET WebService的SOAP响应以下解析,我得到了两种响应,一种是我已经解析的Anytype格式,但是现在我需要解析以下xml

<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>

您的肥皂响应wchich中有大量数据类型对我来说很奇怪。但是,我已经构建了忽略XS:架构部分的代码,并创建了GetReminder对象的数组(从您的上一篇文章中获取的类型:如何从.NET WebService中解析diffgram anytype响应)。我认为,更好的想法是为结构创建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());

问候,马辛

最新更新