Parser un XML sous Android

Dans ce tuto, notre vue traitera principalement les opérations suivantes pour parser un flux XML simple.




  • Obtenir contenu XML en faisant requête HTTP 
  • Analyse de contenu XML et obtenir l'élément DOM de XML. 
  • Obtenir la valeur de chaque élément enfant xml en passant le nom de noeud.



package com.example.EPIXmlDemo;

import android.app.Activity;
import android.os.Bundle;

import android.os.StrictMode;
import android.util.Log;
import android.widget.Toast;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;


import org.apache.http.util.EntityUtils;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;


import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

import javax.xml.parsers.*;


public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */

    // All static variables
    static final String URL = "http://yasminemarket.com/Sitemap.xml.aspx";
    // XML node keys
    static final String KEY_ITEM = "url";
    static final String KEY_TITLE = "loc";
    static final String KEY_AUTHOR = "lastmod";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

// Faire fonctionner cette activité sur une version SDK < 9
        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
        /*new Thread(new Runnable() {
            public void run() {
                parseRssFeed();
            }
        }).start();*/

        parseRssFeed();

    }

    public void parseRssFeed()
    {
        String xml = getXmlFromUrl(URL);

        Document doc = getDomElement(xml);

        NodeList nl = doc.getElementsByTagName(KEY_ITEM);

        for (int i = 0; i < nl.getLength(); i++) {
            Element e = (Element) nl.item(i);
            String name = getValue(e, KEY_TITLE);
            String description =  getValue(e, KEY_AUTHOR);

            Log.d("AMINE",name + ": " + description);

            Toast.makeText(this, name + ": " + description, 3000).show();
        }
    }

//Obtenir le contenu XML en faisant requête HTTP
    public String getXmlFromUrl(String url) {
        String xml = null;

        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            xml = EntityUtils.toString(httpEntity);

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // return XML
        return xml;
    }

//L'analyse du contenu XML et obtenir l'élément DOM
    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 DOM
        return doc;
    }

//Localiser la valeur d'un noeud en poassant son nom
    public String getValue(Element item, String str) {
        NodeList n = item.getElementsByTagName(str);
        return this.getElementValue(n.item(0));
    }

    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 "";
    }
}




sa reste que l'executer

Comments

Popular posts from this blog

Exportation et Importation de vos sites sous IIS7 ou IIS8