IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Comment parser un fichier XML qui se trouve à l'intérieur de l'application


Sujet :

Android

  1. #1
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 773
    Points : 18 776
    Points
    18 776
    Par défaut Comment parser un fichier XML qui se trouve à l'intérieur de l'application
    Bonjour,
    J'ai recherché sur le forum et j'ai trouvé pas mal de truc sur le parsage XML sous Android.
    D'ailleurs je parse un flux RSS dans mon application à un moment donné.
    J'utilise :
    URL
    HttpURLConnection
    InputStream
    DocumentBuilderFactory
    etc...

    Mais je ne suis pas arrivé à récupérer un fichier à l'intérieur des assets par exemple.
    Je suis sûre que ce que je demande est extrêmement simple, mais je ne trouve pas d'exemple qui montre comment s'y prendre...

    Là j'ai trouvé un exemple qui parse de l'XML se trouvant dans /res/xml/.
    https://github.com/commonsguy/cw-and.../Resources/XML

    La classe qui parse reçoit dans son constructeur this.getResources() de l'activity qui l'appelle et en important R, j'arrive à récupérer le XML, enfin je crois.

    Je voudrais parser un fichier de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <liste>
    	<photo>
    		<categorie>interieur</categorie>
    		<miniature>mini.jpeg</miniature>
    		<grande>grande.jpeg</grande>
    	</photo>
    	<photo>
    		<categorie>interieur</categorie>
    		<miniature>mini.jpeg</miniature>
    		<grande>grande.jpeg</grande>
    	</photo>
    </liste>
    Parce que dans l'exemple il parse ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <words>
    	<word value="lorem" />
    	<word value="ipsum" />
    	<word value="dolor" />
    	<word value="sit" />
    	<word value="amet" />
    </words>
    Quand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XmlPullParser xpp=mResources.getXml(R.xml.photo);
    System.out.println("Count : "+xpp.getAttributeCount());
    Affiche -1 ça commence pas bien je suppose.

    Si vous avez une direction dans laquelle m'envoyer pour que j'y arrive, merci de m'en faire part.

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Tu auras un meilleur exemple ici , de plus celui ci reprend l'idée des TAG .

    http://developer.android.com/referen...ullParser.html

  3. #3
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 773
    Points : 18 776
    Points
    18 776
    Par défaut
    Merci, je suis déjà tombé sur cette page et j'avais déjà essayé leur morceau de code, sans grand succès.

    Mais je vais retester maintenant que je sais que ça correspond plus à ce que je recherche.

    Ce que je ne trouve pas c'est comment faire un InputStreamReader avec un fichier se trouvant dans le projet.

    Edit :
    Ok j'ai trouvé, depuis l'Activity je créer une instance de classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parser p2 = new Parser(this.getBaseContext());
    Et dans la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    XmlPullParser xpp = factory.newPullParser();
     
    AssetManager mgr = this.mContext.getAssets();
    InputStream in = mgr.open("xml/photo.xml");
    InputStreamReader isr = new InputStreamReader(in);
     
    xpp.setInput(isr);
    C'est cool d'arriver à lire le fichier, mais maintenant je dois trouver comme proprement récupérer les données du fichier XML.

    J'ai trouvé un exemple, mais je trouve que c'est relativement plus compliqué :
    http://www.xinotes.org/notes/note/1177/

    Ah mais maintenant que j'arrive a avoir un InputStream avec mon fichier XML, je peux faire comme pour mon flux RSS !

  4. #4
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Tu as la réponse dans le tutoriel

    Dans ce cas précis ça ressemble pas mal a du DOM .

    Tu regarde ce que tu récupère dans START_TAG et après ce que tu lis dans TEXT tu les fais correspondre avec la variable lu dans START_TAG .

    quand tu as un END TAG tu effaces la variable de correspondance .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     while (eventType != XmlPullParser.END_DOCUMENT) {
              if(eventType == XmlPullParser.START_DOCUMENT) {
                  System.out.println("Start document");
              } else if(eventType == XmlPullParser.START_TAG) {
                  System.out.println("Start tag "+xpp.getName());
              } else if(eventType == XmlPullParser.END_TAG) {
                  System.out.println("End tag "+xpp.getName());
              } else if(eventType == XmlPullParser.TEXT) {
                  System.out.println("Text "+xpp.getText());
              }
              eventType = xpp.next();
             }
             System.out.println("End document");

  5. #5
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 773
    Points : 18 776
    Points
    18 776
    Par défaut
    Bon finalement j'ai fais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    AssetManager mgr = this.mContext.getAssets();
    InputStream in = mgr.open("xml/photo.xml");
     
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document document;
    document = db.parse(in);
    Element element = document.getDocumentElement();
    NodeList nodeList = element.getElementsByTagName("photo");
     
    if (nodeList.getLength() > 0) {
    	for (int i = 0; i < nodeList.getLength(); i++) 
    	{
    		Element entry = (Element) nodeList.item(i);
    		Element eCategorie = (Element) entry.getElementsByTagName("categorie").item(0);
    		Element eMiniature = (Element) entry.getElementsByTagName("miniature").item(0);
    		Element eGrande = (Element) entry.getElementsByTagName("grande").item(0);
    		String sCategorie = eCategorie.getFirstChild().getNodeValue();
    		String sMiniature = eMiniature.getFirstChild().getNodeValue();
    		String sGrande = eGrande.getFirstChild().getNodeValue();
    	}
    }
    C'est juste ça qu'il me manquait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AssetManager mgr = this.mContext.getAssets();
    InputStream in = mgr.open("xml/photo.xml");
    XmlPullParser c'était trop compliqué pour moi...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/07/2012, 19h27
  2. comment parser ce fichier xml ?
    Par kaayna dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2012, 17h59
  3. comment parser un fichier xml efficacement ?
    Par isoman dans le forum C#
    Réponses: 2
    Dernier message: 08/12/2008, 10h00
  4. [DOM4J] Comment parser un fichier xml avec dom4j
    Par taouja dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 12/04/2007, 07h47
  5. [XML] Comment parser ce fichier XML avec java !
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/03/2006, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo