如何将XML输入流解析为字符串或对象(Android studio)

时间:2016-01-21 11:09:21

标签: java android xml parsing asynchronous

我刚刚使用android和Java。 (我可以在C#中编程)并且我试图从互联网上检索一些XML文件并将其解析为对象。我现在挣扎了好几个小时。我认为它并不复杂,但我找不到正确的方法。

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");
        }
    }
}
是的,有人能帮帮我吗?或链接到WORKING和EASY示例(我无法找到:&#39;()

我读过一些关于将XML解析为对象的Simple XML库,这是这样做的吗?尝试将XML作为字符串或其他东西检索,然后用任何库解析它?

提前致谢!

3 个答案:

答案 0 :(得分:0)

您可以通过JAXB将xml解析为java对象。

1)您可以通过xmlspy将xml更改为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类的第二步。

答案 1 :(得分:0)

尝试使用SrackSites中的SitesXmlPullParser 链接在这里: https://github.com/FoamyGuy/StackSites/blob/master/src/com/makemyandroidapp/example/stacksites/SitesXmlPullParser.java

我们的想法是将标签添加到每个对象,以便您可以选择要使用的任何内容并将项目放入列表中

答案 2 :(得分: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");
            }
        }
    }

字符串“total”包含XML代码。 无论如何,谢谢你的帮助。

相关问题