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 :

Lire un fichier XML


Sujet :

Android

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Lire un fichier XML
    Dans une de mes applications, je doit faire afficher une fiche parmi plusieurs (50env.).
    toutes les fiches on la même structure, aux tailles de commentaires près:
    - Un titre
    - commentaire n°1
    - commentaire n°2
    - commentaire n°3 (éventuellement)
    - Un sous titre
    - commentaire n°1
    - commentaire n°2
    - commentaire n°3 (éventuellement)
    - conclusion

    Comme j'ai plusieurs fiches et toutes identique je pensait mettre tout ça dans un fichier XML du style :
    Code xml : 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
    23
    24
    25
    26
    <Fiche 1>
    	<titre>TITRE</titre>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<soustitre>SOUSTITRE</soustitre>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<conclusion>SOUSTITRE</soustitre>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    </Fiche 1>
    <Fiche 2>
    	<titre>TITRE</titre>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<soustitre>SOUSTITRE</soustitre>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    	<conclusion>SOUSTITRE</soustitre>
    	<commentaire>lmksdflksdlmfksdlm</commentaire>
    </Fiche 2>
     
    ..... etc ....

    Et quand j'appelle la fiche n°2 je voudrais simplement extrait ce qu'il y a dans :
    - la balise <titre> et le mettre dans le bon textview
    - la balise <commentaire> et le mettre dans le bon textview
    etc....
    mais bien sur que pour la fiche appelée.

    Et donc je patauge dans le XML, SAX, DOM la cata, si quelqu'un peux m'expliquer et un bout de code en exemple, je suis preneur

    Merci d'avance.

  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,

    Et donc je patauge dans le XML, SAX, DOM la cata, si quelqu'un peux m'expliquer et un bout de code en exemple, je suis preneur
    Pourrais tu nous montrer ce que tu as déjà fait.

    Après si j'ai bien compris, il te suffit de récupérer les informations nécessaire de l'Xml dans un Objet que tu auras créer, ensuite passé cet objet à ton adapter de ta liste pour afficher les informations voulues.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Voila, d'après ce que j'ai lu le DOM c'est bien mais ça charge tout le xml en mémoire, le SAX lui parcours tout le doc.

    voilà le code, j'ai pas inventé j'arrive à retrouver les contenus, mais comment faire pour alller chercher les contenu de la Fiche n° x et sortir les contenus en fonction des balises particulieres:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    	 TextView myXmlContent = (TextView)findViewById(R.id.my_xml);
    		 String stringXmlContent;
    		    //  ***** BEGIN XML PARSING ***** 
    		    try {
    		    	Resources res = this.getResources(); 
    		    	XmlResourceParser xrp = res.getXml(R.xml.myxml);
    		    	xrp.next(); 
    		    	int eventType = xrp.getEventType();
    		        while (eventType != XmlResourceParser.END_DOCUMENT) 
    		        {
    		            if (eventType == XmlResourceParser.START_DOCUMENT) 
    		            {
    		            	String s = xrp.getName();
    		            	System.out.println("START_DOCUMENT "+xrp.getText());
    		            } 
    		            else if (eventType == XmlPullParser.START_TAG)
    		            {  
    	            	   System.out.println("START_TAG "+xrp.getText());
    	                   String name = xrp.getName();
    	                   // Starts by looking for the entry tag
    	                   if (name.equals("entry")) {
    	                   } else {
    //	                       skip(parser);
    	                   }
    //	                   String s = xrp.getText();
    //	                   if (s.equals("F116")) {
    	                	   //String encounterID = xrp.getAttributeResourceValue(null, "id", 0);
    //	                	   String encounterType = xrp.getAttributeValue(null, "soustitre");
    //	                   }
    		            } 
     
    		            else if (eventType == XmlPullParser.END_TAG)
    //		            	else if (eventType == XmlResourceParser.END_TAG) 
    		               {  
    		            	   String s = xrp.getText();
    		            	   System.out.println("End TAG "+xrp.getText());
    		               } 
    		            else if (eventType == XmlPullParser.TEXT)
    //		            	 else if (eventType == XmlResourceParser.TEXT)
    		            {  
    		            	   String s = xrp.getText();
    		            	   System.out.println("Text "+xrp.getText());
    		               }  
    		               eventType = xrp.next();  
    		            }
     
    /*		            	
    		            if (xrp.getEventType() == XmlResourceParser.START_TAG) {
    		                String s = xrp.getName();
    		                if (s.equals("creature")) {
    		                	//String encounterID = xrp.getAttributeResourceValue(null, "id", 0);
    		                	String encounterType = xrp.getAttributeValue(null, "soustitre");
    		                }
    		            }
     
    	            }
    */
     
    		    } 
    		    catch (XmlPullParserException e) 
    		    {
    		        // TODO Auto-generated catch block
    		        e.printStackTrace();
    		    } catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		        // ***** END XML PARSING *****

  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
    Voila, d'après ce que j'ai lu le DOM c'est bien mais ça charge tout le xml en mémoire, le SAX lui parcours tout le doc.
    Yep c'est cela . après avec le SAX tu parcours plutôt le taille que tu lui indiques. ( soit le doc ou une partie du doc).

    Le DOM lui a besoin de tout le doc.

    Sauf que dans le code tu utilises le XmlResourceParser qui est un autre Parser
    enfin passons.

    Il faut maintenant que tu stockes les données dans un objet que tu auras créer .

    ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Starts by looking for the entry tag
    	                   if (name.equals("entry")) {
    	                   } else {
    //	                       skip(parser);
    	                   }
    Tu compares ton nom avec ta balise si elle correspond tu sauvegardes la donnée dans un objet.
    Cette donnée sera dans le prochain évènement TEXT.

    Pour récupérer les attributs de ta balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xrp.getAttributeFloatValue(null, "tonattribut", 0);
    Donc pour résumer tu créer une classe TaClasse qui aura comme membre un titre , un commentaire.

    Après depuis ton parser à chaque balise d'entrée , tu mémorise qui elle est.
    Après quand tu es dans l'évènement du TEXT en fonction du type d'entréeb que tu as mémorisé tu sauvegarde la donnée dans un Objet TaClasse que tu aura créer lorsque tu aura ta balise annonçant un nouvel élément.

    Quand tu es dans le END_TAG de ton élément alors tu pousse ton Objet dans une liste.

    A la fin du document tu aura la liste complète à passer à ta ListView.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 171
    Points
    171
    Par défaut
    Tu peux aussi passer par une base de données SQLite, ce que je trouve plus simple au final pour faire les recherches ou autre

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Woui la base de données est plus simple, mais je risque certainement d'être limitée en lg de caractere dans les cellules et en nb de ligne

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Pas en sqlite ('TEXT') pour la taille des "colonnes"
    Et certainement pas en nombre de lignes (en tout cas, chercher dans une table à 200K rows est plus rapide que dans un XML a 200K elements).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Créer et lire un fichier xml
    Par Bruno1905 dans le forum C++Builder
    Réponses: 14
    Dernier message: 13/06/2007, 11h11
  2. Réponses: 1
    Dernier message: 17/01/2006, 07h42
  3. [DOM XML] Lire un fichier xml
    Par axel-erator dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 07/12/2005, 22h36
  4. lire un fichier xml
    Par stephanie5 dans le forum C++Builder
    Réponses: 6
    Dernier message: 18/11/2005, 16h34
  5. Comment lire un fichier XML ?
    Par jeromelef dans le forum Débuter
    Réponses: 6
    Dernier message: 29/06/2005, 15h52

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