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 :

Récupération de fichier XML


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut Récupération de fichier XML
    Bonjour à tous,

    Je suis entrain de faire une application Android.

    Je voudrais savoir si la récupération des données XML avec SAXBuilder, se fait de la même façon sur une application entièrement Java et une application sous android ?

    Quand je récupère mon fichier xml dans ma variable "document", cette variable est à Null, et il n'arrive pas à ouvrir le fichier xml. Il y a un endroit spécifique sur android pour placer les fichiers xml ?

    John.

  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

    Quand je récupère mon fichier xml dans ma variable "document", cette variable est à Null, et il n'arrive pas à ouvrir le fichier xml. Il y a un endroit spécifique sur android pour placer les fichiers xml ?
    Oui et non ....

    Comment tu opères actuellement ?
    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
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       document = sxb.build(new File("accords.xml");
    	    } catch (Exception e) {
    	    	System.out.println("********************************************************");
    	    	e.printStackTrace();
    	    	System.out.println(e.getMessage()); 
    	    	System.out.println(document);
                               System.out.println("********************************************************");
    	    }
    J'ai juste fais ça pour savoir ce que contient la variable document mais elle contient rien a chaque fois...

  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
    Dans ce cas ton fichier xml doit être dans le dossier privé de ton application.

    Cela tu peux l'avoir avec openFileInput et openFileOutput

    Normalement les fichiers xml externes à ton application peuvent se mettre soit dans le dossier xml soit dans le dossier assets.

    Pour les ouvrir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File fXmlFile = getResources.getXml("res/xml/accords.xml");
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AssetManager mngr = getAssets();
    try {
        InputStream is2 = mngr.open("accords.xml");
    }
    catch (final IOException e) {
        e.printStackTrace();
    }
    Après tu peux choisir de mettre le fichier sur ta sdcard ..
    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 confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Ok merci, j'ai mis le fichier XML dans mon dossier assets car le getRessources ne marche pas, enfin ils me demandent de créer la méthode, donc elle existe pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File fXmlFile = getResources.getXml("res/xml/accords.xml");
    Normalement avec ce que tu m'as dis ça fonctionne, j'ai fais un sysout, et ça passe bien par le try et ça me renvois quelque chose de cohérent.

    Maintenant j'aimerai bien parcourir et récupérer les données du fichier XML, j'avais l'habitude de le faire avec SAXBuilder et de récupérer le tout dans une variable document.

    Donc comment je dois faire maintenant ?

  6. #6
    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
    Ben tu as plusieurs parser possible sous Android le sujet a pas mal été abrodé sur le forum

    Par exemple Pour SAX:
    http://www.developpez.net/forums/d11...de-characters/

    Après tu as du JDOM sous Android et XmlPullParser je crois, le dernier étant défini comme défaut sous Android.
    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.

  7. #7
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Je viens d'essayer de faire XMLPullParser j'y ai absolument rien compris, donc je vais voir ton lien sur le forum merci.

  8. #8
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Bon j'ai fais ça mais ça passe directement dans le dernier catch

    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
    public void readFic(){
    		try{
    			// création d'une fabrique de parseurs SAX
    			SAXParserFactory fabrique = SAXParserFactory.newInstance();
     
    			// création d'un parseur SAX
    			SAXParser parseur = fabrique.newSAXParser();
     
    			// lecture d'un fichier XML avec un DefaultHandler
    			fichier = new File("accords.xml");
     
    			DefaultHandler gestionnaire = new DefaultHandler();
    			parseur.parse(fichier, gestionnaire);
     
    		}catch(ParserConfigurationException pce){
    			System.out.println("Erreur de configuration du parseur");
    			System.out.println("Lors de l'appel à newSAXParser()");
    		}catch(SAXException se){
    			System.out.println("Erreur de parsing");
    			System.out.println("Lors de l'appel à parse()");
    		}catch(IOException ioe){
    			System.out.println("Erreur d'entrée/sortie");
    			System.out.println(fichier);
    			System.out.println("Lors de l'appel à parse()");
    		}
    	}

  9. #9
    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
    Bon j'ai fais ça mais ça passe directement dans le dernier catch
    Lequel ?
    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.

  10. #10
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Je me suis trompé j'édit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    }catch(IOException ioe){
    			System.out.println("Erreur d'entrée/sortie");
    			System.out.println(fichier);
    			System.out.println("Lors de l'appel à parse()");
    		}

  11. #11
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Bon je pense pas que sa façon de parser soit compatible sous android. Ca me dit :

    #
    # A fatal error has been detected by the Java Runtime Environment:
    #
    # Internal Error (classFileParser.cpp:3470), pid=10512, tid=10908
    # Error: ShouldNotReachHere()
    #
    # JRE version: 7.0_01-b08
    # Java VM: Java HotSpot(TM) 64-Bit Server VM (21.1-b02 mixed mode windows-amd64 compressed oops)
    # Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
    #
    # An error report file with more information is saved as:
    # D:\Users\VANDAL\Desktop\BTS IG\DEV\PTI3\testBouton\hs_err_pid10512.log
    #
    # If you would like to submit a bug report, please visit:
    # http://bugreport.sun.com/bugreport/crash.jsp
    #

  12. #12
    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
    Je pense que tu as un petit problème avec cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = new File("accords.xml");
    Si tu le déclares comme cela je crois de mémoire que le fichier est dans la partie privé de ton application.

    Je pense vu ce que tu demandes que tu dois utiliser le dossier xml ou raw ou asset.

    Et en passant mauvais copier coller de ma part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File fXmlFile = getResources().getXml("res/xml/accords.xml");

    Ah au fait j'ai retrouvé un ancien post sur le sujet :
    http://www.developpez.net/forums/d95...r-xml-res-xml/

    Si il est compatible à toi d'utiliser le bon package :
    http://developer.android.com/referen...SAXParser.html
    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.

  13. #13
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	DocumentBuilder builder = factory.newDocumentBuilder();
    		Document dom = (Document) builder.parse(getResources().openRawResource(R.raw.accords));
    		root = dom.getRootElement();
    Donc j'ai fais ça, j'ai mis .getRootElement() à la place de .getDocumentElement() car elle n'existe pas.

    Par contre, tu peux m'expliquer d'où vient la variable factory ? car j'ai une erreur dessus, elle n'existe pas.

  14. #14
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Bon j'ai fais une appli a part pour tester le parsing xml. J'ai un problème quand je fais parser.getText() ça me renvoie "nullnull" alors que je veux que ça me renvoie "toto".

    voici le fichier xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <accords>
    	<gamme>toto</gamme>
    </accords>
    voici le code :

    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
    public class Main extends Activity {
    	private static String APP_TAG = "tag";
    	private TextView textView;
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		textView = (TextView) findViewById(R.id.textField);
    		findViewById(R.id.readBtn).setOnClickListener(new View.OnClickListener() {
     
    			public void onClick(View v) {
    				XmlPullParser parser = getResources().getXml(R.xml.accords);
    				StringBuilder stringBuilder = new StringBuilder();
    				try {
    					while (parser.next() != XmlPullParser.END_DOCUMENT) {
    						String name = parser.getName();
     
    						if((name != null) && name.equals("gamme")) {
     
    								String note = parser.getText();
    								stringBuilder.append(note);
    								textView.setText(stringBuilder);
    						}
     
    					}
    				}catch(Exception e) {
    					Log.e(APP_TAG, e.getMessage());
    				}
    			}
    		});
    	}
    }

  15. #15
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    L'appel de la méthode getText() n'a de sens que lorsque tu traites l'évènement TEXT du parser; il te faut affiner ta boucle de traitement du contenu XML pour arriver à un résultat, en traitant chacun des évènements émis par le parser
    Quelque chose comme cela
    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
     
    String buffer = null;
    int eventType = parser.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT)
    {
        switch (eventType)
        {
            case XmlPullParser.TEXT:
                buffer = parser.getText();
                break;
            case XmlPullParser.END_TAG:
            {
                String name = parser.getName();
                if (name.equals("gamme") {
                    textView.setText(buffer);
                }
                break;
            }
        }
        eventType = parser.next();
    }

  16. #16
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Ca ne marche pas, quand je clique sur le bouton ça fait rien

  17. #17
    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,

    Par contre, tu peux m'expliquer d'où vient la variable factory ? car j'ai une erreur dessus, elle n'existe pas.
    http://developer.android.com/referen...erFactory.html

    Si tu le souhaites il y a des tutoriels sur le parsing de fichier Xml sous Java
    http://java.developpez.com/cours/?page=java-se-cat#xml


    Pur le XmlPullParser, tu as un exemple ici :
    http://developer.android.com/referen...ullParser.html
    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.

  18. #18
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Sous Java, j'avais fais un système solaire 3D et j'ai parse mon fichier XML sans soucis, c'est juste la, sous android je trouve ça galère.

    Après là je viens de réussir a récupérer les attributs, j'ai mis les chemins de mes sons R.raw.sonX, mais après j'ai un problème au niveau du parseInt, donc ça ne marche toujours pas. Il ne veut pas parser ce que j'ai récupérer en Int.

    Enfin bon, j'ai fais un autre sujet sur le forum a propos d'une optimisation. Si vous avez une idée... ^^

  19. #19
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Je suis parti sur une autre logique qui est de faire une collection. J'ai donc abandonné le XML, vu que finalement ça ne me servait pas a grand chose.

    En tout cas, merci pour l'aide.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/05/2009, 12h57
  2. Problème de récupération du fichier XML
    Par piff62 dans le forum Flex
    Réponses: 5
    Dernier message: 13/06/2008, 01h50
  3. Récupération des éléments d'un fichier xml en flux retour
    Par opeo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 07/11/2005, 10h33
  4. Réponses: 2
    Dernier message: 01/06/2005, 14h28
  5. [XSLT] Récupération du nom du fichier XML analysé
    Par Patkaza dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/01/2005, 11h28

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