SoapObject
是来自基于SOAP的Web服务的响应。
我知道它包含XML
数据,因为我在www.soapclient.com上测试了网络服务。
现在,我想使用XMLPullParser
来解析响应。 XMLPullParser
需要InputStream
,那么有没有办法将SoapObject
转换为InputStream
?
答案 0 :(得分:1)
您可以通过替换parseBody方法重新定义信封类。以下是继承类的示例:
public class SSEnv extends SoapSerializationEnvelope
{
public void parseBody(XmlPullParser parser) throws IOException, XmlPullParserException{
//Yes! its modified code snipet from android dev page :)
int eventType = parser.getEventType();
while (!(eventType == XmlPullParser.END_TAG && parser.getName().equalsIgnoreCase("body"))) {
if(eventType == XmlPullParser.START_DOCUMENT) {
System.out.println("Start document");
} else if(eventType == XmlPullParser.START_TAG) {
System.out.println("Start tag "+parser.getName());
} else if(eventType == XmlPullParser.END_TAG) {
System.out.println("End tag "+parser.getName());
} else if(eventType == XmlPullParser.TEXT) {
System.out.println("Text "+parser.getText());
}
eventType = parser.next();
}
}
}
请记住,来自SoapEnvelope的解析方法需要" Body"的结束标记,这就是为什么循环中有条件" while(!(eventType == XmlPullParser.END_TAG&& parser.getName ().equalsIgnoreCase("主体")))&#34 ;.并且在修改之后,getRequest和bodyIn之后的内容将为null。
第二种方法是从HttpTransportSE解析reponseDump但它是一种恐怖主义;)
亲切的问候 马尔钦