我刚刚使用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作为字符串或其他东西检索,然后用任何库解析它?
提前致谢!
答案 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代码。 无论如何,谢谢你的帮助。