Bonjour à tous.
Je suis étudiant et novice sur android.
Après avoir lu pas mal de tutos qui conseillaient de parser avec SAX pour les appli android, j'ai décidé de me lancer même si DOM et JDOM ont quand même l'air plus simples à utiliser.
Bref, j'ai un peu de mal à comprendre les mécanismes SAX.
J'ai besoin, pour mon appli de parser un xml afin d'y récupérer des données.
Il s'agit du libelle d'une monnaie et d'un taux de conversion.
Voici le xml
Dans mon Activity j'ai écris ceci lors d'un évènement :
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 <?xml version="1.0" encoding="UTF-8"?> <gesmes:Envelope xmlns:gesmes="http://" xmlns="http://"> <gesmes:subject>Reference rates</gesmes:subject> <gesmes:Sender> <gesmes:name>Rates</gesmes:name> </gesmes:Sender> <Cube> <Cube time='2012-04-13'> <Cube currency='USD' rate='1.3148'/> <Cube currency='JPY' rate='106.49'/> <Cube currency='BGN' rate='1.9558'/> <Cube currency='CZK' rate='24.750'/> <Cube currency='DKK' rate='7.4386'/> <Cube currency='GBP' rate='0.82480'/> </Cube> </Cube> </gesmes:Envelope>
Ensuite j'ai créé une classe Monnaie :
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 try{ //Création d'une fabrique de parseurs SAX SAXParserFactory fabrique = SAXParserFactory.newInstance(); //Création d'un parseur SAX SAXParser parseur = fabrique.newSAXParser(); //Lecture du fichier XML avec un DefaultHandler File fichierXML = new File("http://www.versmonxml.xml"); DefaultHandler gestionnaire = new MonnaieHandler(); parseur.parse(fichierXML, gestionnaire); }catch(ParserConfigurationException pce){ }catch(SAXException se){ }catch(IOException ioe){ }
Et le Handler (là ou je galère):
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 public class Monnaie { private String identifiant; private float valeurPourUnEuro; public Monnaie(){ } public Monnaie(String identifiant, float valeurPourUnEuro){ this.identifiant = identifiant; this.valeurPourUnEuro = valeurPourUnEuro; } public String getIdentifiant() { return identifiant; } public float getValeurPourUnEuro() { return valeurPourUnEuro; } public void setIdentifiant(String identifiant) { this.identifiant = identifiant; } public void setValeurPourUnEuro(float valeurPourUnEuro) { this.valeurPourUnEuro = valeurPourUnEuro; }
Déjà le balisage xml est un peu spécial par rapport à ce que l'on voit dans les tutos, et les noeuds portent le même nom...
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 package com.appliperso.convertisseur; import java.util.ArrayList; import java.util.jar.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class MonnaieHandler extends DefaultHandler { private ArrayList<Monnaie> listeMonnaies; private Monnaie monnaie; public MonnaieHandler(){ super(); } public void startDocument() throws SAXException{ super.startDocument(); listeMonnaies = new ArrayList<Monnaie>(); } public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { if (localName.equals("Cube")){ monnaie = new Monnaie(); monnaie.setIdentifiant(atts.getValue("currency")); monnaie.setValeurPourUnEuro(Float.parseFloat(atts.getValue("rate"))); listeMonnaies.add(monnaie); } } public void endElement(String uri, String localName, String name) throws SAXException{ } public void endDocument() throws SAXException{ //Comment renvoyer ma liste 'listeMonnaies'? } }
En fait je voudrais récupérer ma liste d'objets monnaie.
Je suis un peu pommé. Need help!
Merci d'avance.![]()
Partager