Parser un fichier xml
Bonjour à tous,
Je sais parser un fichier xml de ce type avec NSXMLParser :
<ITEM>
<TITLE>titre</TITLE>
<DATE>26/05/2016</DATE>
</ITEM>
comment faire pour parser celui-ci ?
<ITEM>
<PRODUIT REF="01">
</PRODUIT>
<PRODUIT REF="02">
</PRODUIT>
</ITEM>
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
• Comprends-tu la structure/format du XML que tu donnes en exemple ?
C'est en général le plus dur, les gens sur du JSON ne comprenne pas sa structure et font n'importe quoi (d'après mon expérience sur StackOverFlow). Si tu es à l'aise avec du JSON et que la structure XML te pose problème, il doit y avoir des convertisseurs de XML<=>JSON en ligne pour la comprendre.
• As-tu essayé d'implémenter les méthodes adéquates de NSXMLParser et du delegate ?
Là , il faut un minimum de connaissance sur le pattern delegate.
Si c'est oui pour les 2 questions, tu peux regarder les paramètres des méthodes delegates, je conseillerais avec un NSLog() (car en breakpoint, ça risque d'être un peu long et tu perds la trace écrite/chemin global), pour savoir qui est appelé (quelle méthode déléguée en général dans ton cas), et quand (comment ça itère en gros). Ensuite, tu pourras construire ton object parsé correspondant.
Si tu as toujours un soucis, n'hésite pas à revenir ici.
Note :
Cela peut paraitre direct de te dire : " Démerdes-toi ", mais de mon expérience, c'est la meilleure manière d'apprendre. J'ai donné les 2 grosses pistes nécessaires à la compréhension du parsing, qui te permettra alors de comprendre comment parser d'autres XML, voire même de ne pas galéjer si ton XML subit un changement (API mise à jour avec un paramètre en plus). Pour en revenir à l'analogie avec le JSON, à force de voir des questions dessus, 99% des cas, il suffit juste de comprendre la structure du JSON pour parser intelligemment et ne pas galérer (je ne dis pas qu'il ne peut pas y avoir des trucs tricky comme du JSON en string dans du JSON, mais une fois compris).
Tu as un délégué qui t'informe quand il rencontre un nouvel élément et te joint avec ses attributs.
Il suffit juste ensuite de récupérer l'attribut comme pour les éléments.
https://developer.apple.com/library/ios/documentation/Cocoa/Reference/NSXMLParserDelegate_Protocol/index.html#//apple_ref/occ/intfm/NSXMLParserDelegate/parser:didStartElement:namespaceURI:qualifiedName:attributes:
Je n'ai guère d'expérience avec le XML, mais la structure de celui-ci me semble étrange. A ma connaissance, le XML c'est une série de :
- entête d'identification
- donnée
- entête fin de donnée
Là c'est :
- entête d'identification avec donnée incluse
- marqueur fin de donnée
Pour moi, ce n'est pas du XML, mais un format qui t'empêche d'utiliser la détection automatique des balises via un parseur XML, puisque la donnée est mélangée avec sa balise .
Tu ne peut pas utiliser un XML avec cette structure ?
Ou celle-ci :
Bon j'ai dit n'importe quoi.
Normal, moi noob n'ayant utilisé XML qu'une seule fois dans ma vie !
Regarde la doc apple à cette adresse :
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/XMLParsing/Articles/HandlingElements.html#//apple_ref/doc/uid/20002265-BCIJFGJI
Il y ai expliqué comment parser une donnée XML de la forme :
J'aurais appris un truc aujourd'hui.
Merci Magiic pour le lien qui m'a mis sur la voie.
Ceci dit, je trouve cette syntaxe trop lourde. Pourquoi ajouter un entête de fin de donnée, alors qu'elle est entièrement définie dans l'identificateur. J'aurais bien vu un format comme celui-ci :
Plutôt que :
EDIT :
En y réfléchissant c'est logique, pour pouvoir ajouter d'autres champs à un produit, dans le genre :
Merci à tous, je n'avais pas fait attention à attributeDict
donc avec le code suivant
je récupère bien les attributs des balises, impeccable.