Android XML解析列表视图

Android 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

我使用本教程来实现XML解析,如果我想将url更改为这一个,如何做到这一点?因为xml格式不同。如果有类似的问题,请通知我。谢谢

每个listitem中都有一个标记,但我的url在开始时只包含“Infos”,其中包括所有标记

MainActivity.java

   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();
}