1

少し複雑な SOAP 応答を取得しています。応答は次のようになります。

    <?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>
    <getDetailResponse xmlns="http://saiserviceapp.com/">
      <getDetailResult>
        <UserDetail>
          <UserID>int</UserID>
          <VehicleID>int</VehicleID>
          <UserName>string</UserName>
          <VehicleNo>string</VehicleNo>
          <ModelID>int</ModelID>
          <VariantID>int</VariantID>
          <Color>string</Color>
          <DOP>dateTime</DOP>
          <InsCompany>string</InsCompany>
          <InsExpire>dateTime</InsExpire>
          <ContactNo>long</ContactNo>
          <DInsExpire>dateTime</DInsExpire>
        </UserDetail>
        <UserDetail>
          <UserID>int</UserID>
          <VehicleID>int</VehicleID>
          <UserName>string</UserName>
          <VehicleNo>string</VehicleNo>
          <ModelID>int</ModelID>
          <VariantID>int</VariantID>
          <Color>string</Color>
          <DOP>dateTime</DOP>
          <InsCompany>string</InsCompany>
          <InsExpire>dateTime</InsExpire>
          <ContactNo>long</ContactNo>
          <DInsExpire>dateTime</DInsExpire>
        </UserDetail>
      </getDetailResult>
    </getDetailResponse>
  </soap:Body>
</soap:Envelope>

今それを解析するために、私はこのコードを書きました:

 resultRequestSOAP = (SoapObject)envelope.bodyIn;
    SoapObject root = (SoapObject) resultRequestSOAP.getProperty(mStrProperty);
    SoapObject childObj[] = new SoapObject[root.getPropertyCount()];
    for(int i = 0; i < root.getPropertyCount(); i++)
    {
        childObj[i] = (SoapObject) root.getProperty("UserDetail");
        vector.addElement(childObj[i].getProperty(3));
    }

ここでは、以下のように文字列に変換した後にルート値を取得しています:

    anyType
{
 UserDetail=
      anyType{
          UserID=10884; 
          VehicleID=507; 
          UserName=ffasdd; 
          VehicleNo=GJGJGJG; 
          ModelID=0; 
          VariantID=0; 
          DOP=0001-01-01T00:00:00; 
          InsExpire=null; 
          ContactNo=8888555522; 
          DInsExpire=0001-01-01T00:00:00; 
          }; 
  UserDetail=
        anyType{
            UserID=10884; 
            VehicleID=508; 
            UserName=ffasdd; 
            VehicleNo=HGHGGHJ; 
            ModelID=0; 
            VariantID=0; 
            DOP=0001-01-01T00:00:00; 
            InsExpire=null; 
            ContactNo=8888555522; 
            DInsExpire=0001-01-01T00:00:00; 
            }; 
}

この複雑な応答から、車両番号が必要になり、それらをベクトルに保存したいと考えています。現在、上記のコードを使用して、最初の応答セットを複数回取得しています。ベクトルに同じ vehicleNo が複数回追加されていることを意味します。

この問題を解決するにはどうすればよいですか。

4

3 に答える 3

2

このコードが役立つと思います。

int count = root.getPropertyCount();

for(int i=0; i< count; i++)
{
    SoapObject response = (SoapObject) envelope.getResponse();                          
    SoapObject root = (SoapObject) response.getProperty("UserDetail");
    String userID = (root.getPropertyAsString("UserID"));  
    String userName = (root.getPropertyAsString("UserName"));
}
于 2015-03-31T06:56:47.793 に答える
0

(SoapObject) root.getProperty("UserDetail");常に同じ位置root

于 2013-05-27T21:27:03.837 に答える
0

以下の方法で問題を解決できます。

for(int i = 0; i < root.getPropertyCount(); i++)
            {
                Object property = root.getProperty(i);
                 if (property instanceof SoapObject)
                   {
                     SoapObject category_list = (SoapObject) property;
                     String strVehNo = category_list.getProperty("VehicleNo").toString();
                     String strVehId = category_list.getProperty("VehicleID").toString();
                     vector.addElement(strVehNo);
                     vector.addElement(strVehId);
                   }
            }
        }
于 2013-05-29T03:45:36.013 に答える