2013-03-27 73 views
-1

我需要使用android后台服务从下面的XML获取芒果和橙色的价值。异步任务和肥皂Android

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 

<soap:Body><wsFruitResponse xmlns="http://www.orange.ws/fruitspec/ws"> 

<mango>wow</mango> 

<orange>boom</orange> 

</wsFruitResponse> 

</soap:Body> 

</soap:Envelope> 

然后它应该存储在数组列表中。我怎样才能做到这一点。我习惯于定期的萨克斯解析器,但这个肥皂的东西看起来很奇怪。请帮助

类loadingTask扩展的AsyncTask {

protected String doInBackground(String... urls) { 

     ... 
     sh.parseContent(""); 
     return ""; 

    } 

    protected void onPostExecute(String s) { 

     ShowProgress.dismiss(); 

    } 
} 

class SAXHelper { 
    public HashMap<String, String> userList = new HashMap<String, String>(); 
    private URL url2; 

    public SAXHelper(String url1) throws MalformedURLException { 
     this.url2 = new URL(url1); 
    } 

    public RSSHandler parseContent(String parseContent) { 
     RSSHandler df = new RSSHandler(); 
     try { 

      .... 
      xr.setContentHandler(df); 
      xr.parse(new InputSource(url2.openStream())); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return df; 
    } 
} 

class RSSHandler extends DefaultHandler { 

    private Post currentPost = new Post(); 

    StringBuffer chars = new StringBuffer(); 

    @Override 
    public void startElement(String uri, String localName, String qName, 
      Attributes atts) { 

     chars = new StringBuffer(); 
     if (localName.equalsIgnoreCase("item")) { 

     } 
    } 

    @Override 
    public void endElement(String uri, String localName, String qName) 
      throws SAXException { 

     if (localName.equalsIgnoreCase("orange") 
       && currentPost.getOrange() == null) { 
      currentPost.setOrange(chars.toString()); 

     } 
     if (localName.equalsIgnoreCase("mango") 
       && currentPost.getMango() == null) { 
      currentPost.setMango(chars.toString()); 

     } 

     if (localName.equalsIgnoreCase("item")) { 
      PostList.add(currentPost); 
      currentPost = new Post(); 
     } 

    } 

    @Override 
    public void characters(char ch[], int start, int length) { 
     chars.append(new String(ch, start, length)); 
    } 

} 
+0

的XML: <皂:信封的xmlns:SOAP = “http://schemas.xmlsoap.org/soap/envelope/”> 热潮 yakusha 2013-03-27 09:55:28

+0

请包围着您的问题以更专业的方式,你可能会得到一些答案。 – AbdulHannan 2013-03-27 09:57:33

+0

你有什么试过? http://mattgemmell.com/2008/12/08/what-have-you-tried/ – Deestan 2013-03-27 10:04:16

回答

0

N.B:这是使用Jsoup。 Download Jsoup,将其粘贴到您的项目库文件夹。

你可以尝试这样的事:

URL form = new URL(Your_url_String); 
HttpURLConnection connection1 = (HttpURLConnection)form.openConnection(); 
connection1.setRequestProperty("Cookie", your_cookie);//if you have no cookie, you can skip this line 

connection1.setReadTimeout(10000); 
StringBuilder whole = new StringBuilder(); 

BufferedReader in = new BufferedReader(
     new InputStreamReader(new BufferedInputStream(connection1.getInputStream()))); 
String inputLine; 
while ((inputLine = in.readLine()) != null) 
    whole.append(inputLine); 
    in.close(); 
Document doc = Jsoup.parse(whole.toString()); 
Element element1 = doc.select("mango"); 
Element element2 = doc.select("orange"); 

String value_of_mango = element1.text(); 
String value_of_orange = element2.text(); 

更新:

u能为你的肥皂像做:记住,我只好输入soap为字符串。

String html = "<html><head><title>First parse</title></head>" 
    + "<body><p>Parsed HTML into a doc.</p></body></html>"; 

Document doc = Jsoup.parse(html); 

Element element1 = doc.select("mango"); 
Element element2 = doc.select("orange"); 

String value_of_mango = element1.text(); 
String value_of_orange = element2.text(); 
+0

URL form = new URL(Your_url_String); ?我可以把soap内容放在your_url_string中吗? – yakusha 2013-03-29 07:21:35

+0

@yakusha:我已经更新我的答案 – Shoshi 2013-03-29 09:41:57

+0

okie感谢花花公子 – yakusha 2013-03-29 09:58:43