Android XML解析列表视图
我使用本教程来实现XML解析,如果我想将url更改为这一个,如何做到这一点?因为xml格式不同。如果有类似的问题,请通知我。谢谢 每个listitem中都有一个标记,但我的url在开始时只包含“Infos”,其中包括所有标记 MainActivity.javaAndroid XML解析列表视图,android,xml,listview,Android,Xml,Listview,我使用本教程来实现XML解析,如果我想将url更改为这一个,如何做到这一点?因为xml格式不同。如果有类似的问题,请通知我。谢谢 每个listitem中都有一个标记,但我的url在开始时只包含“Infos”,其中包括所有标记 MainActivity.java package eason.xml; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; imp
package eason.xml;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends Activity {
// Declare Variables
ListView listview;
ListViewAdapter adapter;
ProgressDialog mProgressDialog;
ArrayList<HashMap<String, String>> arraylist;
static String ID = "Id";
static String NAME = "Name";
static String WEBSITE = "Website";
static String PICTURE1 = "Picture";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the view from listview_main.xml
setContentView(R.layout.listview_main);
// Execute DownloadJSON AsyncTask
new DownloadXML().execute();
}
// DownloadJSON AsyncTask
private class DownloadXML extends AsyncTask<Void, Void, Void> {
private void parseRequestResultXML(InputStream stream) {
arraylist=new ArrayList<HashMap<String,String>>();
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(stream, null);
HashMap<String, String> map = null;
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (parser.getEventType()) {
case XmlPullParser.START_DOCUMENT:
//Log.i("TAG", " Start document " + parser.getName());
break;
case XmlPullParser.START_TAG:
//Log.i("TAG", " Start tag " + parser.getName());
String tag=parser.getName();
if(tag.equals("Info")){ //read values from Info tag
Log.i("TAG","reading info");
ID=parser.getAttributeValue(null, "Id");
NAME=parser.getAttributeValue(null, "Name");
WEBSITE=parser.getAttributeValue(null, "Website");
PICTURE1=parser.getAttributeValue(null,"Picture1");
//do same for other values
map = new HashMap<String, String>();
map.put("Id", ID);
map.put("Name", NAME);
map.put("Website", WEBSITE);
arraylist.add(map);
}
break;
case XmlPullParser.END_TAG:
//Log.i("TAG", " End tag " + parser.getName());
break;
default:
break;
}
eventType=parser.next(); //get next event type
}
//reading all values from list
for (Map<String,String> e : arraylist) {
Log.d("TAG"," Row ID "+e.get("Id")+" Name "+e.get("Name")+" Website "+e.get("Website")+" Picture1 "+e.get("Picture1"));
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// Create a progressdialog
mProgressDialog = new ProgressDialog(MainActivity.this);
// Set progressdialog title
mProgressDialog.setTitle("Android XML Parse Tutorial");
// Set progressdialog message
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
// Show progressdialog
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// Create an array
arraylist = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
// Retrieve nodes from the given URL address
InputStream stream = parser.getInputStreamFromUrl("http://gis.taiwan.net.tw/XMLReleaseALL_public/activity_C_f.xml");
if (stream != null) {
try {parseRequestResultXML(stream);
stream.close();}catch(IOException e1) {
e1.printStackTrace();
}
}return null;
}
@Override
protected void onPostExecute(Void args) {
// Locate the listview in listview_main.xml
listview = (ListView) findViewById(R.id.listview);
// Pass the results into ListViewAdapter.java
adapter = new ListViewAdapter(MainActivity.this, arraylist);
// Binds the Adapter to the ListView
listview.setAdapter(adapter);
// Close the progressdialog
mProgressDialog.dismiss();
}
}}
更改
getXmlFromUrl()
中的URL,然后更改parser.getValue(e,**RANK**)
中的键。无论您的格式是什么,都需要指定获取数据的键,然后进行相应的保存 在该教程中,作者正在从XML的文本标记中读取值。但在您的情况下,需要从属性名中获取值
private void parseRequestResultXML(InputStream stream) {
arraylist=new ArrayList<HashMap<String,String>>();
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(stream, null);
HashMap<String, String> map = null;
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (parser.getEventType()) {
case XmlPullParser.START_DOCUMENT:
//Log.i("TAG", " Start document " + parser.getName());
break;
case XmlPullParser.START_TAG:
//Log.i("TAG", " Start tag " + parser.getName());
String tag=parser.getName();
if(tag.equals("Info")){ //read values from Info tag
Log.i("TAG","reading info");
String id=parser.getAttributeValue(null, "Id");
String name=parser.getAttributeValue(null, "Name");
String website=parser.getAttributeValue(null, "Website");
//do same for other values
map = new HashMap<String, String>();
map.put("id", id);
map.put("name", name);
map.put("website", website);
arraylist.add(map);
}
break;
case XmlPullParser.END_TAG:
//Log.i("TAG", " End tag " + parser.getName());
break;
default:
break;
}
eventType=parser.next(); //get next event type
}
//reading all values from list
for (Map<String,String> e : arraylist) {
Log.d("TAG"," Row ID "+e.get("id")+" Name "+e.get("name")+" Website "+e.get("website"));
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
在doInBackground
arraylist = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
// Retrieve nodes from the given URL address
InputStream stream = parser.getInputStreamFromUrl("http://www.androidbegin.com/tutorial/xmlparseimgtxt.xml");
if (stream != null){
parseRequestResultXML(stream);
stream.close();
}
arraylist=newarraylist();
XMLParser=新的XMLParser();
//从给定的URL地址检索节点
InputStream=解析器。getInputStreamFromUrl(“http://www.androidbegin.com/tutorial/xmlparseimgtxt.xml");
if(流!=null){
parseRequestResultXML(流);
stream.close();
}
为什么要负面评论?为什么不留下评论?更改getXmlFromUrl中的URL?没有注意到标记格式不同吗?谢谢。但我不知道应该从代码中替换哪一行。只需调用方法,并将inputstream作为参数。stream.close();在句柄异常上说我应该将私有void parseRequestResultXML放在哪里?在DownloadXML中。。。about stream.close()捕获异常。把它放在try块中。不起作用,begin标记是dude,你需要更改键来获取数据。如果新标记是info,那么您可以像这样检查它,如果(tag.equals(“info”))。所有内容都是用代码编写的。
private void parseRequestResultXML(InputStream stream) {
arraylist=new ArrayList<HashMap<String,String>>();
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(stream, null);
HashMap<String, String> map = null;
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (parser.getEventType()) {
case XmlPullParser.START_DOCUMENT:
//Log.i("TAG", " Start document " + parser.getName());
break;
case XmlPullParser.START_TAG:
//Log.i("TAG", " Start tag " + parser.getName());
String tag=parser.getName();
if(tag.equals("Info")){ //read values from Info tag
Log.i("TAG","reading info");
String id=parser.getAttributeValue(null, "Id");
String name=parser.getAttributeValue(null, "Name");
String website=parser.getAttributeValue(null, "Website");
//do same for other values
map = new HashMap<String, String>();
map.put("id", id);
map.put("name", name);
map.put("website", website);
arraylist.add(map);
}
break;
case XmlPullParser.END_TAG:
//Log.i("TAG", " End tag " + parser.getName());
break;
default:
break;
}
eventType=parser.next(); //get next event type
}
//reading all values from list
for (Map<String,String> e : arraylist) {
Log.d("TAG"," Row ID "+e.get("id")+" Name "+e.get("name")+" Website "+e.get("website"));
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
public InputStream getInputStreamFromUrl(String url) {
String xml = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
return httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
arraylist = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
// Retrieve nodes from the given URL address
InputStream stream = parser.getInputStreamFromUrl("http://www.androidbegin.com/tutorial/xmlparseimgtxt.xml");
if (stream != null){
parseRequestResultXML(stream);
stream.close();
}