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:
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:
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:
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:
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:
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.