2016-01-21 20 views
1

Iam新增了android和Java。 (我可以在C#中編程),並試圖從互聯網上檢索一些XML文件並將其解析爲對象。 Iam現在掙扎了好幾個小時。我認爲這不是很複雜,但我無法找到正確的做法。如何將XML輸入流解析爲字符串或對象(Android Studio)

Iam從this開始,但有很多東西在裏面,我不需要,所以我試圖寫一些乾淨的代碼只有我需要的東西。我在互聯網上閱讀了很多文章,但我不能讓他們工作....

我在android studio中創建了一個默認項目,帶有一個Activity。我在這個活動中創建了一個子類XmlManager。這個子類擴展了AsyncTask。這是其中的方法:

private class XmlManager extends AsyncTask<String,String,String> { 
@Override 
protected String doInBackground(String... inputUrl) 
{ 
    Log.i("XML Status", "ASync proces started"); 
    getStream(inputUrl[0]); 
    Log.i("XML Status", "ASync proces finished"); 
    return null; 
} 

@Override 
protected void onPostExecute(String result) 
{ 
    //Here i want to return the list with objects... 
    // OR an string with the XML so i can parse it somewhere else, 
    // I dont know what is the best practice 
} 

private void getStream(String urlString) { 

    URL url =null; 
    HttpURLConnection urlConnection = null; 
    InputStream is = null; 

    try { 
     url = new URL(urlString); 
     Log.i("Status", "Connection opened"); 
     urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.setRequestMethod("GET"); 
     urlConnection.connect(); 

     is = urlConnection.getInputStream(); 
     Log.i("Status", "Streamreader filled"); 
    } 
    catch (Exception e) { 
     Log.e("Error",e.getMessage().toString()); 
    } 
    finally { 
     if (urlConnection != null) { 
      urlConnection.disconnect(); 
      Log.i("Status","Connection disconnected"); 
     } 
    } 
} 

有人可以幫我嗎?或者有一個工作和簡單的例子的鏈接(我無法找到:'()

我讀了一些簡單的XML庫來解析XML到對象,這是做到這一點的方法?嘗試檢索XML爲字符串什麼,然後與任何庫解析呢?

提前感謝!

回答

0

我發現我錯過了。我需要和bufferedReader和一個Stringbuilder來從網站的XML中創建一個字符串。不,我可以用SimpleXML庫解析字符串和對象。該getStream方法我現在用的就是:

private void getStream(String urlString) { 
     URL url = null; 
     HttpURLConnection urlConnection = null; 
     InputStream is = null; 

     try { 
      url = new URL(urlString); 

      urlConnection = (HttpURLConnection) url.openConnection(); 
      urlConnection.setRequestMethod("GET"); 
      urlConnection.connect(); 
      Log.i("Status", "Connection opened"); 

      BufferedReader r = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
      StringBuilder total = new StringBuilder(); 
      String line; 
      while ((line = r.readLine()) != null) { 
       total.append(line); 
      } 
      Log.i("Status", "XML loaded into string"); 

     } catch (Exception e) { 
      Log.e("Error", e.getMessage().toString()); 
     } finally { 
      if (urlConnection != null) { 
       urlConnection.disconnect(); 
       Log.i("Status", "Connection disconnected"); 
      } 
     } 
    } 

字符串「總」包含的XML代碼。 感謝您的幫助。

0

您可以通過JAXB解析XML和Java對象。

1)你可以改變通過XML的XMLSpy爲xsd。

2)使用eclipse插件(http://sourceforge.net/projects/jaxb-builder/)生成java類。

3)使用jaxb將xml解析爲java對象。示例代碼是這樣的:

JAXBContext context = JAXBContext.newInstance(XXXX.class); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
XXXX obj = unmarshaller.unmarshal(is); 

XXXX是生成java類的第二步。

+0

謝謝,對不起,我不知道這很重要,但是我使用android studio(編輯我的問題;-))。不管怎麼說,還是要謝謝你! – RoDo

相關問題