在Android中处理SOAP响应的最佳方法是什么?

3
我正在使用KSoap2与服务器通信。通信正常并返回一组值,我在下面列出了这些值。我不确定我处理响应的方式是否正确。我编写了一个单独的Java类来实现KvmSerializable,以将XML对象映射到Java对象。在网上进行了长时间的研究后,我发现像SAX、DOM等解析器的使用更加标准和灵活。
有没有办法使用SAX来解析以下响应...如果可以,请提供一些参考资料。
这是我从Android客户端应用程序向服务器发送请求后收到的响应。请注意,此响应未以.xml结尾/返回为.xml文件。
这是Web客户端的响应:

http://134.1.10.5/Maxima/MaximaSystem.asmx/ValidateLogin

<DataSet>
<xs:schema id="NewDataSet">
<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="Name" type="xs:string" minOccurs="0"/>
<xs:element name="UserIcode" type="xs:int" minOccurs="0"/>
<xs:element name="UserUserName" type="xs:string" minOccurs="0"/>
<xs:element name="UserPassword" type="xs:string" minOccurs="0"/>
<xs:element name="UserTypeICode" type="xs:int" minOccurs="0"/>
<xs:element name="ProfileTable" type="xs:string" minOccurs="0"/>
<xs:element name="UserTypeDesc" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

<diffgr:diffgram>

<NewDataSet>
<Table diffgr:id="Table1" msdata:rowOrder="0">
<Name>Frecan </Name>
<UserIcode>634</UserIcode>
<UserUserName>dairy</UserUserName>
<UserPassword>dairy123</UserPassword>
<UserTypeICode>632</UserTypeICode>
<ProfileTable/>
<UserTypeDesc>Dentist</UserTypeDesc>
</Table>
</NewDataSet>
</diffgr:diffgram>
</DataSet>

这是响应内容,没有XML标签……任何东西……请建议我如何使用Android的本地解析器来解析它。如果可以,请提供一些参考资料。

这是当我通过Android客户端ping服务器时得到的响应样例。

 anyType{schema=anyType{element=anyType{complexType=anyType{choice=anyType{element=an
 yType{complexType=anyType{sequence=anyType{element=anyType{....
 // some values ........
 };
 element=anyType{};
 element=anyType{}; element=anyType{}; element=anyType{};     element=anyType{}; 
 element=anyType{}; }; }; }; }; };unique=anyType{selector=anyType{};
 field=anyType{};}; }; }; diffgram=anyType{}; }

请问,是否可以在Android中使用本地解析器。

先行致谢。

1个回答

4
SoapObject result = (SoapObject)envelope.bodyIn;

    if(result != null){

        int count = result.getPropertyCount();
        //TextView t = (TextView)this.findViewById(R.id.resultbox);
        //t.setText("SOAP response:\n\n" + count);

        SoapObject nameResult = (SoapObject) result.getProperty(0);
        // TextView t = (TextView)this.findViewById(R.id.resultbox);
        //t.setText("SOAP response:\n\n" + nameResult.toString());

        SoapObject test = (SoapObject) nameResult.getProperty(1);
        // TextView t = (TextView)this.findViewById(R.id.resultbox);
        // t.setText("SOAP response:\n\n" + test.toString());

        SoapObject dar = (SoapObject) test.getProperty(0);
        //TextView t = (TextView)this.findViewById(R.id.resultbox);
        //t.setText("SOAP response:\n\n" + dar.toString());

        SoapObject suvas = (SoapObject) dar.getProperty(0);
        int c = dar.getPropertyCount();
        TextView t = (TextView)this.findViewById(R.id.resultbox);
        t.setText("SOAP response:\n\n" + suvas.toString());
        //t.setText("SOAP response:\n\n" + c);
        //SoapObject nivas = (SoapObject) suvas.getProperty(NewsId);
        //TextView t = (TextView)this.findViewById(R.id.resultbox);
        // t.setText("SOAP response:\n\n" + nivas.toString());

    }

首先,您需要在soapObject中获取一个SOAP响应,然后计算总属性。

获取计数后,请逐个检查哪个属性中包含您的数据,您还可以实现内部循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接