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 :

Erreur "ClassCastException" lors du parsing d'un fichier XML


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Par défaut Erreur "ClassCastException" lors du parsing d'un fichier XML
    Bonjour à tous,

    J'ai un soucis je développe pour android 2.2 et j'ai réussit à lire un sous noeud de mon XML en boucle, le problème c'est lorsque je souhaite lire un sous - sous noeud il plante, pourtant c'est la même logique je vous donne le xml ainsi que le code qui pose soucis.

    code XML :

    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
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <master>
        <mynode>
    		<id>20120303789004526</id>
            <expediteur>
    			<nom>jean luc</nom>
    			<rue>15 rue lol</rue>
    			<cp>15487</cp>
    			<ville>LOIN</ville>
    			<telephone>0415474487</telephone>
    		</expediteur>
            <colis>
    			<nombre>2</nombre>
    			<paquet>
    				<code_barre>8806071525143</code_barre>
    				<taille>30*30*18</taille>
    				<poids>0.86</poids>
    			</paquet>
    			<paquet>
    				<code_barre>8806071532530</code_barre>
    				<taille>20*40*20</taille>
    				<poids>0.35</poids>
    			</paquet>
    		</colis>
            <destinataire>
    			<nom>Jacques Lorien</nom>
    			<rue>18 rue olli</rue>
    			<cp>15487</cp>
    			<ville>Malles</ville>
    			<complement_adresse>Merci de déposer a l'accueil</complement_adresse>
    			<telephone>0645874454</telephone>
    			<portable>0611845678</portable>
    		</destinataire>
        </mynode>
    	<mynode>
    		<id>20120303789008751</id>
            <expediteur>
    			<nom>Sarl Tara</nom>
    			<rue>25 rue Lothaire IV</rue>
    			<cp>75000</cp>
    			<ville>PARIS</ville>
    			<telephone>0648914966</telephone>
    		</expediteur>
            <colis>
    			<nombre>4</nombre>
    			<paquet>
    				<code_barre>8806071524000</code_barre>
    				<taille>30*30*30</taille>
    				<poids>0.67</poids>
    			</paquet>
    			<paquet>
    				<code_barre>8806071525000</code_barre>
    				<taille>30*30*30</taille>
    				<poids>0.85</poids>
    			</paquet>
    			<paquet>
    				<code_barre>8806071526000</code_barre>
    				<taille>30*30*30</taille>
    				<poids>1.60</poids>
    			</paquet>
    			<paquet>
    				<code_barre>8806071537000</code_barre>
    				<taille>10*40*15</taille>
    				<poids>0.39</poids>
    			</paquet>
    		</colis>
            <destinataire>
    			<nom>Monsieur Pion Jean</nom>
    			<rue>25 rue Très loin</rue>
    			<cp>48540</cp>
    			<ville>LA BAS</ville>
    			<complement_adresse>Coucou</complement_adresse>
    			<telephone>0358741112</telephone>
    			<portable>0648745477</portable>
    		</destinataire>
        </mynode>
    	<mynode>
    		<id>20120303789004789</id>
            <expediteur>
    			<nom>M. DUPONT Jaques</nom>
    			<rue>89 bld de la libération</rue>
    			<cp>19548</cp>
    			<ville>NICE</ville>
    			<telephone>0559332567</telephone>
    		</expediteur>
            <colis>
    			<nombre>1</nombre>
    			<paquet>
    				<code_barre>8806071525000</code_barre>
    				<taille>30*30*30</taille>
    				<poids>0.90</poids>
    			</paquet>
    		</colis>
            <destinataire>
    			<nom>Mme Cristophe Laisse</nom>
    			<rue>80 rue de la paix</rue>
    			<cp>75000</cp>
    			<ville>PARIS</ville>
    			<complement_adresse>Batiment E</complement_adresse>
    			<telephone>0553819684</telephone>
    			<portable>0612518798</portable>
    		</destinataire>
        </mynode>
    </master>

    Le code pour lire l adresse de l expediteur qui fonctionne :
    Code java : 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
    xmlParse xmlP = new xmlParse();
    				    xmlP.addressView();
     
    				    String url = "http://www.mysite.ext/monXML.xml";
    					String parentNode = "mynode"; // parent node
     
    					int duration = Toast.LENGT
    					XMLParser parser = new XMLParser();
    					String xml = parser.getXmlFromUrl(url);
     
    					Context context = getApplicationContext();
     
    					Document doc = parser.getDomElement(xml);
    // Ma node list contenant tous les infos des mynode
    					NodeList nl = doc.getElementsByTagName(parentNode);
     
    					for (int i = 0; i < nl.getLength(); i++) {
    						Element e = (Element) nl.item(i);
     
    // Recuperation des infos de la node
    						String nom = parser.getValue(e, "nom");
    						String rue = parser.getValue(e, "rue");
    						String cp = parser.getValue(e, "cp");
    						String ville = parser.getValue(e, "ville");
    						String telephone = parser.getValue(e, "telephone");
    						Toast toast = Toast.makeText(context, nom+" "+rue+" "+cp+" "+ville+" "+telephone, duration);
    						toast.show();
     
     
     
    					}


    Mais j'aimerai maintenant a l'interieur de cette boucle lire toutes les nodes code_barre alors j'essaye :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    NodeList nl2 = nl.item(i).getChildNodes();
     
    						for (int r = 0; r < nl2.getLength(); r++) {
     
    							Element e2 = (Element) nl2.item(0);
    							String cb = parser.getValue(e2, "code_barre");
     
    							Toast toast2 = Toast.makeText(context, cb, duration);
    							toast2.show();
    						}
    sans succès donc j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (int z = 0; z < nl2.getLength(); z++) {
    							Element e2 = (Element) nl.item(z);
     
    								String cb = parser.getValue(e2, "code_barre");
     
    								Toast toast2 = Toast.makeText(context, cb, duration);
    								toast2.show();
    						}
    Toujours un plantage, voici le message dans le catlog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    08-17 16:00:44.014: E/AndroidRuntime(609): FATAL EXCEPTION: main
    08-17 16:00:44.014: E/AndroidRuntime(609): java.lang.ClassCastException: org.apache.harmony.xml.dom.TextImpl
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at com.example.livrexpress.MainActivity$4.onClick(MainActivity.java:133)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at android.view.View.performClick(View.java:2408)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at android.view.View$PerformClick.run(View.java:8816)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at android.os.Handler.handleCallback(Handler.java:587)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at android.os.Handler.dispatchMessage(Handler.java:92)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at android.os.Looper.loop(Looper.java:123)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at java.lang.reflect.Method.invokeNative(Native Method)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at java.lang.reflect.Method.invoke(Method.java:521)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    08-17 16:00:44.014: E/AndroidRuntime(609): 	at dalvik.system.NativeStart.main(Native Method)
    Merci d'avance.

  2. #2
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Le contenu d'un tag XML n'est pas un "Element"
    Mais un simple Node (de texte) d'ou le class-cast exception....

    Element('master')
    ..Element('mynode')
    ....Element('id')
    ......Text: 20120303789004526
    ....Element('expediteur')
    ......Element('nom')
    ........Text: jean luc

    etc.
    Attention le contenu peut être plein de chose....
    CDATASection, Text, ....
    Voire même un commentaire (Comment)

    On peu utiliser getNodeType() pour savoir le type d'un Node
    et ELEMENT_NODE pour un element, TEXT_NODE pour du texte

    Mais bon... Node.getNodeValue() renvoit toujours le contenu du texte (donc pas besoin de faire de 'cast')

Discussions similaires

  1. Erreur lors du parsing d'un fichier XML
    Par BIREFKOUN dans le forum Web sémantique
    Réponses: 6
    Dernier message: 17/01/2013, 15h55
  2. [DOM] Erreur lors du parsing d'un fichier XML par l'API DOM
    Par patricetoan dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 26/09/2005, 12h43

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