如何在Android中解析SOAP Web服务XML数据?

如何在Android中解析SOAP Web服务XML数据?,android,web-services,soap,xml-parsing,Android,Web Services,Soap,Xml Parsing,我希望在Android soap web服务中以XML的形式发送输入请求,最后我希望以XML的形式显示响应。我如何在Android中使用soap web服务 package com.venkattt.pack; import java.net.SocketException; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.

我希望在Android soap web服务中以XML的形式发送输入请求,最后我希望以XML的形式显示响应。我如何在Android中使用soap web服务

 package com.venkattt.pack;

import java.net.SocketException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.ksoap2.transport.HttpTransportSE;

import android.app.Activity;
import android.os.Bundle;

public class SoapWebservicesExampleActivity extends Activity {
    /** Called when the activity is first created. */
      final String NAMESPACE = "urn:sap-com:document:sap:soap:functions:mc-style";
     final String URL = "http://**********:8000/sap/bc/srt/wsdl/srvc_14DAE9C8D79F1EE196F1FC6C6518A345/wsdl11/allinone/ws_policy/document?sap-client=800&sap-user=*******&sap-password=*******";
      final String METHOD_NAME = "Z_GET_CUST_GEN";
     final String SOAP_ACTION = "urn:sap-com:document:sap:soap:functions:mc-style/Z_GET_CUST_GEN";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); // set up
            request.addProperty("Input", "1460");
            request.addProperty("Langu", "d");
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); // put all required data into a soap
            envelope.dotNet = false;
            envelope.setOutputSoapObject(request);
            HttpTransportSE httpTransport = new HttpTransportSE(URL);
            httpTransport.debug = true;

            try {

                 httpTransport.call(SOAP_ACTION, envelope);
                 Object result = (Object) envelope.getResponse();

                 System.out.println("theeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee result"+result);

                }
            catch(SocketException ex){
                    ex.printStackTrace();
                } catch (Exception e) {
                   e.printStackTrace();
                }
        }
    }

我编写了使用Android的Web服务的代码,但没有得到xml数据?

嗨,这可能对你有用,因为你必须下载两个文件

你还需要,

  • commons-httpclient-3.0.1.jar
  • ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
然后在类的
AndroidHttpTransport
call()
方法中,您可以将xml响应分配给您定义的字符串,并可以进一步访问它

下面是相同的psuedo代码

responseDump = new String(buf);
unescape(responseDump);
your_string = responseDump;
然后
您的\u字符串将有完整的xml响应。

扩展活动中的公共类
       HttpPost httppost = new HttpPost("http://192.168.1.103/test/index1.php");
        //httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost); 
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
        Log.e("log_tag", "connection success ");
     //convert response to string

        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) 
        {
            sb.append(line + "\n");

        }
        is.close();
        result=sb.toString();
        //Log.e("",""+result);
{ HttpPost-HttpPost; 输入流为; ListView lv; 文本视图显示条; ArrayList atcodeid=新的ArrayList(); 阵列适配器; ArrayList listItems=新的ArrayList(); ArrayList originalname=新的ArrayList(); 字符串模式; 按钮btn_名称; 按钮btn_图; 共享引用优先权; 智力测验; 字符串shortcutname; @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.from); lv=(ListView)findViewById(R.id.listView1); displayStrip=(TextView)findViewById(R.id.displayStrip); btn_name=(按钮)findViewById(R.id.name); btn_map=(按钮)findviewbyd(R.id.map); prefs=PreferenceManager.getDefaultSharedPreferences(此); 测试=prefs.getInt(“设置”,0); 适配器=新阵列适配器(从.this, android.R.layout.simple\u list\u item\u 1, 清单项目); 低压设置适配器(适配器); lv.setFastScrollEnabled(真); 字符串结果=”; //ArrayList nameValuePairs=新的ArrayList(); //添加(新的BasicNameValuePair(“生日”、“1990”)); 试一试{ HttpClient HttpClient=新的DefaultHttpClient(); HttpPost HttpPost=新的HttpPost(“http://192.168.1.103/test/index1.php"); //setEntity(新的UrlEncodedFormEntity(nameValuePairs)); HttpResponse response=httpclient.execute(httppost); HttpEntity=response.getEntity(); is=entity.getContent(); //Log.e(“Log_标签”,“连接成功”); //Toast.makeText(getApplicationContext(),“pass”,Toast.LENGTH\u SHORT.show(); }捕获(例外e){ e(“Log_标记”,“http连接错误”+e.toString()); } //将响应转换为字符串 尝试 { BufferedReader reader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),8; StringBuilder sb=新的StringBuilder(); 字符串行=null; 而((line=reader.readLine())!=null) { sb.追加(第+行“\n”); //Toast.makeText(getApplicationContext(),“pass”,Toast.LENGTH\u SHORT.show(); } is.close(); 结果=sb.toString(); //Log.e(“,”+结果); }捕获(例外e){ Log.e(“Log_标记”,“错误转换结果”+e.toString()); } 试一试{ JSONArray jArray=新JSONArray(结果); JSONObject json_data=null;
对于(int i=0;i使用DOM解析器或SAX解析器会更好…此链接肯定对您有用:


当您调用
HttpTransport.responseDump

下面是我如何实现的

public String GetNewTransaction_service(String login_id,String Password_id)
{



    String SOAP_ACTION = "http://www.webserviceX.NET/GetWeather";
    String METHOD_NAME = "GetWeather";
    String NAMESPACE  = "http://www.webserviceX.NET";
    String SOAP_ADDRESS = "http://www.webservicex.com/globalweather.asmx";

    SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);
    request.addProperty("login",login_id);
    request.addProperty("pwd",Password_id);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    envelope.implicitTypes = true;

    HttpTransportSE httpTransaport = new HttpTransportSE(SOAP_ADDRESS);
    httpTransaport.debug = true;

    String response = null;


    try
    {
        httpTransaport.call(SOAP_ACTION,envelope);
        response = httpTransaport.responseDump;
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return  response;
}

刚才我用输入和输出请求xml编辑了我的问题请看一次并告诉我如何在Android中实现?刚才我在帖子中编辑了我的请求和响应请看一次并告诉我如何编码我是Android Web服务的新手我如何在Android中使用此服务?请看我的更新代码并告诉我我正在做什么g错误?应该是
envelope.dotNet=true;
然后告诉我你得到了什么响应。05-23 11:50:47.871:WARN/System.err(330):java.net.SocketTimeoutException:Connection超时05-23 11:50:47.871:WARN/System.err(330):在org.apache.harmony.luni.platform.OSNetworkSystem.connect(本机方法)05-23 11:50:47.871:WARN/System.err(330):在dalvik.System.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:357)我怎样才能加入Android活动?我正在发送示例代码检查它一个,但它是json文件u更改它为xml文件我没有任何json url只是我有WSDL url和bibding url?检查一下这个示例代码谢谢你的回复raju我想以xml值的形式发送输入请求,我很想得到xml数据看到我的问题了吗?
public String GetNewTransaction_service(String login_id,String Password_id)
{



    String SOAP_ACTION = "http://www.webserviceX.NET/GetWeather";
    String METHOD_NAME = "GetWeather";
    String NAMESPACE  = "http://www.webserviceX.NET";
    String SOAP_ADDRESS = "http://www.webservicex.com/globalweather.asmx";

    SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);
    request.addProperty("login",login_id);
    request.addProperty("pwd",Password_id);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    envelope.implicitTypes = true;

    HttpTransportSE httpTransaport = new HttpTransportSE(SOAP_ADDRESS);
    httpTransaport.debug = true;

    String response = null;


    try
    {
        httpTransaport.call(SOAP_ACTION,envelope);
        response = httpTransaport.responseDump;
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return  response;
}