Android parses and displays XML files using dom

Source: Internet
Author: User
Tags key string

This program implements the use of Dom to parse XML files from the network side, display them in the list, and click to enter the relevant page.

First, we create a class to implement the acquisition of HTTP requests and XML file nodes. The HTTP request here is very simple. We will pass a URL and implement it in the code using this method.

public String getXmlFromUrl(String url) {        String xml = null;        try {            // defaultHttpClient            DefaultHttpClient httpClient = new DefaultHttpClient();            HttpPost httpPost = new HttpPost(url);            HttpResponse httpResponse = httpClient.execute(httpPost);            HttpEntity httpEntity = httpResponse.getEntity();            xml = EntityUtils.toString(httpEntity,"utf-8");        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (ClientProtocolException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        // return XML        return xml;    }

Set the encoding format or garbled characters

   xml = EntityUtils.toString(httpEntity,"utf-8");

 

View code

public class XMLParser {    // constructor    public XMLParser() {    }    /**     * Getting XML from URL making HTTP request     * @param url string     * */    public String getXmlFromUrl(String url) {        String xml = null;        try {            // defaultHttpClient            DefaultHttpClient httpClient = new DefaultHttpClient();            HttpPost httpPost = new HttpPost(url);            HttpResponse httpResponse = httpClient.execute(httpPost);            HttpEntity httpEntity = httpResponse.getEntity();            xml = EntityUtils.toString(httpEntity,"utf-8");        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (ClientProtocolException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        // return XML        return xml;    }        /**     * Getting XML DOM element     * @param XML string     * */    public Document getDomElement(String xml){        Document doc = null;        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        try {            DocumentBuilder db = dbf.newDocumentBuilder();            InputSource is = new InputSource();                is.setCharacterStream(new StringReader(xml));                doc = db.parse(is);             } catch (ParserConfigurationException e) {                Log.e("Error: ", e.getMessage());                return null;            } catch (SAXException e) {                Log.e("Error: ", e.getMessage());                return null;            } catch (IOException e) {                Log.e("Error: ", e.getMessage());                return null;            }            return doc;    }        /** Getting node value      * @param elem element      */     public final String getElementValue( Node elem ) {         Node child;         if( elem != null){             if (elem.hasChildNodes()){                 for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){                     if( child.getNodeType() == Node.TEXT_NODE  ){                         return child.getNodeValue();                     }                 }             }         }         return "";     }     /**      * Getting node value      * @param Element node      * @param key string      * */     public String getValue(Element item, String str) {                    NodeList n = item.getElementsByTagName(str);                    return this.getElementValue(n.item(0));        }}

Then we create an activity inheritance and listactivity, which defines some nodes in this activity.

View code

public class AndroidXMLParsingActivity extends ListActivity {    // All static variables    static final String URL = "http://10.0.2.2/biyeshejidata/menu.xml";    // XML node keys    static final String KEY_ITEM = "item"; // parent node    static final String KEY_ID = "id";    static final String KEY_NAME = "name";    static final String KEY_COST = "cost";    static final String KEY_DESC = "description";    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();        XMLParser parser = new XMLParser();        String xml = parser.getXmlFromUrl(URL); // getting XML        Document doc = parser.getDomElement(xml); // getting DOM element        NodeList nl = doc.getElementsByTagName(KEY_ITEM);        // looping through all item nodes <item>        for (int i = 0; i < nl.getLength(); i++) {            // creating new HashMap            HashMap<String, String> map = new HashMap<String, String>();            Element e = (Element) nl.item(i);            // adding each child node to HashMap key => value            map.put(KEY_ID, parser.getValue(e, KEY_ID));            map.put(KEY_NAME, parser.getValue(e, KEY_NAME));            map.put(KEY_COST, "Rs." + parser.getValue(e, KEY_COST));            map.put(KEY_DESC, parser.getValue(e, KEY_DESC));            // adding HashList to ArrayList            menuItems.add(map);        }        // Adding menuItems to ListView        ListAdapter adapter = new SimpleAdapter(this, menuItems,                R.layout.list_item,                new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] {                        R.id.name, R.id.desciption, R.id.cost });        setListAdapter(adapter);        // selecting single ListView item        ListView lv = getListView();        lv.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                // getting values from selected ListItem                String name = ((TextView) view.findViewById(R.id.name)).getText().toString();                String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString();                String description = ((TextView) view.findViewById(R.id.desciption)).getText().toString();                                // Starting new intent                Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);                in.putExtra(KEY_NAME, name);                in.putExtra(KEY_COST, cost);                in.putExtra(KEY_DESC, description);                startActivity(in);            }        });    }}

Finally, click to enter the activity of a new page.

View code

public class SingleMenuItemActivity  extends Activity {        // XML node keys    static final String KEY_NAME = "name";    static final String KEY_COST = "cost";    static final String KEY_DESC = "description";    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.single_list_item);                // getting intent data        Intent in = getIntent();                // Get XML values from previous intent        String name = in.getStringExtra(KEY_NAME);        String cost = in.getStringExtra(KEY_COST);        String description = in.getStringExtra(KEY_DESC);                // Displaying all values on the screen        TextView lblName = (TextView) findViewById(R.id.name_label);        TextView lblCost = (TextView) findViewById(R.id.cost_label);        TextView lblDesc = (TextView) findViewById(R.id.description_label);                lblName.setText(name);        lblCost.setText(cost);        lblDesc.setText(description);    }}

This completes parsing of XML data format files.

 

 

 

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.