【问题标题】:Get data from XML in String - Android从字符串中的 XML 获取数据 - Android
【发布时间】:2015-04-26 07:18:40
【问题描述】:

我正在使用 SOAP 服务来获取票证。我正在发送用户并通过,我正在获取字符串中的 xml。为此,我正在使用 ksoap2。

@Override
protected String doInBackground(String... params) {

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty(USER, params[0]);
    request.addProperty(PASS, params[1]);

    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    soapEnvelope.bodyOut = request;
    soapEnvelope.setOutputSoapObject(request);

    HttpTransportSE HttpTransport = new HttpTransportSE(URL);
    try {
        HttpTransport.call(SOAP_ACTION, soapEnvelope);
        return soapEnvelope.getResponse().toString();
    } catch (IOException | XmlPullParserException e) {
        e.printStackTrace();
        return null;
    }
}

@Override
    protected void onPostExecute(String XML) {
        super.onPostExecute(XML);
        if (result != null) {
           // Here I need to get data from XML

        }
    }

我的 XML 字符串如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<resp err="0">
<ticket>1234567989</ticket>
</resp>

所以我需要获取错误号和票号。

【问题讨论】:

标签: java android xml ksoap2


【解决方案1】:

不要将您的响应转换为字符串并返回,而是使用getProperty() 方法获取您需要的属性并将它们转换为字符串。这是我的做法:

    String ticket;

    public void getSoap() {

    SoapObject request = new SoapObject(NAMESPACE, METHODNAME);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.implicitTypes = false;
    envelope.setOutputSoapObject(request);
    HttpTransportSE httpTransportSe = new HttpTransportSE(URL);
    httpTransportSe.debug = true;
    SoapObject response = null;

    try {
        httpTransportSe.call(SOAPACTION, envelope);
        response = (SoapObject) envelope.getResponse();
        ticket = response.getProperty("ticket").toString();

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

}

从属性中获取“err”元素可能需要更多的研究,但您可以在获得 ticket 的地方尝试这个:

String err = response.getAttribute("err").toString;

希望这有助于编码愉快!

【讨论】:

  • ...什么是响应...?肥皂对象..?
  • 我得到这个错误:java.lang.ClassCastException: java.lang.String cannot be cast to org.ksoap2.serialization.SoapObject At: response = (SoapObject) envelope.getResponse();跨度>
  • 你可以试试 bodyIn 吗?像这样: response = (SoapObject) envelope.bodyIn;
  • 我试过了,但后来我得到错误:非法财产:票。我打印响应,它看起来像这样: apiLoginResponse{return=123456; }
  • 解析结果因响应而异,您应该检查属性,但我相信您明白了。
【解决方案2】:

使用 JDom 解析 XML:

String xmlString = //get xml string;  

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
DocumentBuilder builder;  
try  
{  
    builder = factory.newDocumentBuilder();  
    Document document = builder.parse( new InputSource( new StringReader( xmlString ) ) );  
} catch (Exception e) {  
    e.printStackTrace();  
}

接下来通过 XPath 从文档 http://www.w3schools.com/xpath/xpath_examples.asp 获取值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 2016-03-29
    • 1970-01-01
    • 2014-08-25
    • 2017-07-25
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多