2016-01-21 50 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

相关问题