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 fichier XML


Sujet :

Android

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut Lire fichier XML
    Bonjour,

    Je vois beaucoup du tutos qui expliquent comment lire un fichier XML grâce à une URL, mais pas beaucoup si je veux lire un fichier de mon projet android.

    Au moment de la délcaration du fichier j'ai ç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
     
    try {
     
    /** Handling XML */
    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser sp = spf.newSAXParser();
    XMLReader xr = sp.getXMLReader();
     
    /** Send URL to parse XML Tags */
    URL sourceUrl = new URL(
    "http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml");
     
    /** Create handler to handle XML Tags ( extends DefaultHandler ) */
    MyXMLHandler myXMLHandler = new MyXMLHandler();
    xr.setContentHandler(myXMLHandler);
    xr.parse(new InputSource(sourceUrl.openStream()));
     
    } catch (Exception e) {
    System.out.println("XML Pasing Excpetion = " + e);
    }
    Voilà, ca marche, c'est cool mais c'est une URL, donc pas ce que je veux.


    J'ai essayé un truc du genre :

    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
     
    /** Handling XML */
    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser sp = spf.newSAXParser();
    XMLReader xr = sp.getXMLReader();
     
    /** Send URL to parse XML Tags */
    String file = "config.xml";
     
    /** Create handler to handle XML Tags ( extends DefaultHandler ) */
    MyXMLHandler myXMLHandler = new MyXMLHandler();
    xr.setContentHandler(myXMLHandler);
    xr.parse(new InputSource(file));
     
    } catch (Exception e) {
    System.out.println("XML Pasing Excpetion = " + e);
    }
    Mais bien sur, ca ne fonctionne pas. Est ce que vous pourriez m'aider à lire ce fichier xml s'il vout plait... ?


    MERCI !

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    quelle erreur apparait dans la logCat ?

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Merci de prendre du temps pour m'aider. Je reformule mon problème :

    Je l'a refais de façon plus simple. Je veux accéder aux informations du fichier XML suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0"?>
    <ressources>
     
    <ip>192.168.1.2</ip>
     
    <port>11002</port>
     
    </ressources>
    Voilà tout bête. Rien de compliqué ...

    Je veux accéder à ce fichier ( se trouvant à la racine de MonProjetAndroid ) dans une Activity android

    et récupérer l'ip et le port dans deux variables voilà ... Les tutos que je trouve sur internet sont très biens pour lire un .xml dans une URL, mais alors pour le reste, on peut se brosser.


    Je vous remercie !

  4. #4
    Expert confirmé

    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
    Par défaut
    Bonjour,

    Je suppose que ton fichier config.xml est dans le répertoire des assets ou sur la sdcard? Car sinon cela ne peut pas marcher .

    Pour lire sur la sdcard tu trouveras pas mal de réponse sur le forum comme sur la lecture des fichiers dans les assets .

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Oui bah voilà, j'aimerais qu'il soit dans la sd card. Et non j'ai abosolument rien trouvé. Je trouve rien qui explique comment lire un fichier .xml sur la sd card. Je trouve vraiment pas et j'en ai vraiment vraiment marre de chercher ...

  6. #6
    Expert confirmé

    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
    Par défaut
    Bon ,

    Il me semble que l'on a déjà abordé ce sujet sur le forum précédemment donc tu trouveras peut être un peu plus d'élément que je vais te donner .

    Pour récupérer le chemin de la sd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static File GetRootSdCard () {
    		String status  = Environment.getExternalStorageState();
    	    try {
    	        if (status.equals(Environment.MEDIA_MOUNTED)) {
    		       return Environment.getExternalStorageDirectory();
    		    }
            } catch (IllegalArgumentException e) {
                status = Environment.MEDIA_REMOVED;
            }
            return null;
    	}
    Après il suffit de parcourir le répertoire , normalement tu connais le chemin à partir de la racine de la sdcard .

    après tu peux utiliser ta fonction avec le chemin obtenue

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Je dois :

    1. Aller chercher un fichier .xml dans la SD Card
    2. Parser ce fichier
    3. Lire les deux informations que j'ai besoin


    Je ne sais rien faire de tout ça, je suis sûr ça tient en même pas 20 lignes de code .. Aidez-moi plz ....

    :up:

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Merci beaucoup l'ami, Mais ... Une fois que j'ai cela, je fais quoi ? Comment je fais le lien avec mon fichier, et le fait de le parser ?


    Merci ...

  9. #9
    Expert confirmé

    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
    Par défaut
    Ben il suffit que tu lui rajoute le chemin vers ton fichier
    lechemindetasd + "/lechemindetonfichier";

    après tu le parse avec la méthode que tu as trouvé.
    vu que tu lis un fichier j'utiliserais cette méthode
    public void parse (File f, DefaultHandler dh)

    http://developer.android.com/referen...aultHandler%29

    Pour lire les données à l'intérieur il faut implémenter DefaultHandler des données que tu dois avoir dans ton xml

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

  10. #10
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Merci beaucoup dans un premier temps.

    Admettons que mon fichier soit à la racine de ma sdcard, je fais comment ?

    Ensuite, pour le reste, je comprends absolument rien au XML, autant le développement je suis très bon. Mais là je lutte sur le parsing XML depuis ce matin ... Je comprends rien au fonctionnement, même avec la doc, désolé

  11. #11
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Et je puis je ne peux pas passer un chemin local à une URL... Je vois pas ou tu veux l'ajouter le chemin... Enfin j'sais pas, avec du code ça serait pas mieux pour comprendre .. ?

  12. #12
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Bonjour,

    Feanorin t'as donné toutes les billes en main. Tu as tous les liens vers la documentation nécessaire, l'algorithme d'exécution. Il ne te reste plus qu'à coder.
    Si c'est l'étape de codage qui te pose un problème, il faut que tu penses à y aller petit à petit et reprendre les bases du Java avant de vouloir essayer de faire quelques choses de plus compliqué.
    Je te rappelle que nous sommes ici pour te guider, t'expliquer les choses, pas pour faire du code à ta place.

  13. #13
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Encore faudrait-il les bonnes billes.

    Aller, trève de plaisanteries.

    J'ai ç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
    23
    24
    25
     
    		try {
     
    		/* 			Bonne solution
    		 * 	/** Handling XML */
     
    			SAXParserFactory spf = SAXParserFactory.newInstance();
    			SAXParser sp = spf.newSAXParser();
     
     
     
     
    			String file = GetRootSdCard()+"/config.xml";
     
     
    			// Create handler to handle XML Tags ( extends DefaultHandler ) 
    			MyXMLHandler myXMLHandler = new MyXMLHandler();
     
    			sp.parse(file, myXMLHandler);
     
     
     
    		} catch (Exception e) {
    			System.out.println("XML Pasing Excpetion = " + e);
    		}
    En admettant que mon fichier est à la racine de ma SD Card.

    Et mon myXMLHandler :

    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
    70
    71
     
    package ParsingXML;
     
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    public class MyXMLHandler extends DefaultHandler {
     
    	Boolean currentElement = false;
    	String currentValue = null;
    	public static ConnectList ConnectList = null;
     
    	public static ConnectList getConnectList() {
    		return ConnectList;
    	}
     
    	public static void setConnectList(ConnectList ConnectList) {
    		MyXMLHandler.ConnectList = ConnectList;
    	}
     
    	/** Called when tag starts ( ex:- <name>AndroidPeople</name> 
             * -- <name> )*/
    	@Override
    	public void startElement(String uri, String localName, String qName,
    			Attributes attributes) throws SAXException {
     
    		currentElement = true;
     
    		if (localName.equals("maintag"))
    		{
    			/** Start */ 
    			ConnectList = new ConnectList();
    		} else if (localName.equals("website")) {
    			/** Get attribute value */
    			String attr = attributes.getValue("category");
    			ConnectList.setCategory(attr);
    		}
     
    	}
     
    	/** Called when tag closing ( ex:- <name>AndroidPeople</name> 
             * -- </name> )*/
    	@Override
    	public void endElement(String uri, String localName, String qName)
    			throws SAXException {
     
    		currentElement = false;
     
    		/** set value */ 
    		if (localName.equalsIgnoreCase("name"))
    			ConnectList.setName(currentValue);
    		else if (localName.equalsIgnoreCase("website"))
    			ConnectList.setWebsite(currentValue);
     
    	}
     
    	/** Called to get tag characters ( ex:- <name>AndroidPeople</name> 
             * -- to get AndroidPeople Character ) */
    	@Override
    	public void characters(char[] ch, int start, int length)
    			throws SAXException {
     
    		if (currentElement) {
    			currentValue = new String(ch, start, length);
    			currentElement = false;
    		}
     
    	}
     
    }
    Avec une classe ConnectList :

    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
     
    package ParsingXML;
     
     
     
    import java.util.ArrayList;
     
    /** Contains getter and setter method for varialbles  */
    public class ConnectList {
     
    	/** Variables */
    	private ArrayList<String> name = new ArrayList<String>();
    	private ArrayList<String> website = new ArrayList<String>();
    	private ArrayList<String> category = new ArrayList<String>();
     
     
    	/** In Setter method default it will return arraylist 
             *  change that to add  */
     
    	public ArrayList<String> getName() {
    		return name;
    	}
     
    	public void setName(String name) {
    		this.name.add(name);
    	}
     
    	public ArrayList<String> getWebsite() {
    		return website;
    	}
     
    	public void setWebsite(String website) {
    		this.website.add(website);
    	}
     
    	public ArrayList<String> getCategory() {
    		return category;
    	}
     
    	public void setCategory(String category) {
    		this.category.add(category);
    	}
     
    }
    Cela ne marche toujours pas, pourquoi à votre avis ?

  14. #14
    Expert confirmé

    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
    Par défaut
    Alors ,

    As tu bien monté ton fichier sur ta sdcard .

    Pour le savoir tu le verras dans le DDMS dans eclipse .

    Ton code a l'air correct après .

    En passant comme te la suggérer JediMaster tu as un logcat qui précise si tu as des erreurs éventuelles , si tu en as n'oublies pas de nous en faire part .


    NB: les balises code s'écrivent comme cela [code]

  15. #15
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Il faut lui passer un File, pas une String.

    Si tu lui passes une String, il va croire que c'est une URI... (Comme l'indique sa doc.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Non c'est vrai je l'ai mal monté. Disons que je ne sais pas vraiment où le mettre, j'arrive même pas à créer de fichier dessus.

    Mon chemin c'est GT-1900/Phone/

    Et après j'ai plein de sous-dossiers mais je vois pas où mettre mon config.xml, je peux rien créer...

    Merci de votre aide ..

  17. #17
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    C'est quand même aberrant d'ignorer les conseils que les gens donnent...
    Si tu sais pas demande
    Le logCat si il n'est pas afficher ce trouve dans Windows->open perspective->logCat

    Ici on veut bien t'aider mais on a pas forcement le temps de passer 3h a determiner d'ou vient l'erreur en faisant une dizaine de supositions pour la pluspart inutiles, alors que l'on pourrait avoir notre reponse par la simple copie des logs d'erreurs.

    De plus tu pousses le probleme sur le fait que le code XML serait foireux alors que tu n'accède même pas au fichier ce qui fait que tes deux premiers posts étaient hors sujet et que finalement on s'en serait directement rendu compte grace aux logs.

  18. #18
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    C'est même pas question de logcat, je peux pas mettre mon fichier sur la sd. C'est quand même fou de pas savoir lire.
    Quand on sait pas on demande

Discussions similaires

  1. lire fichier xml
    Par Alex35 dans le forum ASP
    Réponses: 5
    Dernier message: 14/02/2007, 12h13
  2. Lire fichier XML
    Par freestyler dans le forum Delphi
    Réponses: 14
    Dernier message: 26/09/2006, 11h56
  3. [XSLT] lire fichier XML
    Par julien14 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 07/07/2006, 12h16
  4. [SimpleXML] lire fichier xml
    Par ecoinfo dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/07/2006, 20h22
  5. Lire fichier XML en java
    Par loop4 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 17/05/2006, 16h46

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