Android:有没有办法将SoapObject(携带XML数据)转换为InputStream对象?

时间:2014-11-28 05:24:56

标签: android xml inputstream ksoap2 xmlpullparser

SoapObject是来自基于SOAP的Web服务的响应。

我知道它包含XML数据,因为我在www.soapclient.com上测试了网络服务。

现在,我想使用XMLPullParser来解析响应。 XMLPullParser需要InputStream,那么有没有办法将SoapObject转换为InputStream

1 个答案:

答案 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但它是一种恐怖主义;)

亲切的问候 马尔钦