Parser un fichier xml

heliohelio Membre
mai 2016 modifié dans API UIKit #1

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.

Réponses

  • LarmeLarme Membre
    mai 2016 modifié #2

    • 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).


  • MagiicMagiic Membre

    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:


  • DrakenDraken Membre
    mai 2016 modifié #4


    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.




    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 ?



    <ITEM>
    <PRODUIT>REF="01"</PRODUIT>
    <PRODUIT>REF="02"</PRODUIT>
    </ITEM>


    Ou celle-ci :



    <ITEM>
    <PRODUIT>01</PRODUIT>
    <PRODUIT>02</PRODUIT>
    </ITEM>


  • DrakenDraken Membre
    mai 2016 modifié #5

    Bon j'ai dit n'importe quoi.


    Normal, moi noob n'ayant utilisé XML qu'une seule fois dans ma vie !  :o


     


    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 :


     



     


     


    <PRODUIT REF="01">
    </PRODUIT>

     


    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 :



    <ITEM>
    <PRODUIT REF="01">
    <PRODUIT REF="02">
    </ITEM>


    Plutôt que :



    <ITEM>
    <PRODUIT REF="01">
    </PRODUIT>
    <PRODUIT REF="02">
    </PRODUIT>
    </ITEM>


    EDIT :


    En y réfléchissant c'est logique, pour pouvoir ajouter d'autres champs à  un produit, dans le genre :



    <ITEM>
    <PRODUIT REF="01">
    <FOURNISSEUR>Intel</FOURNISSEUR>
    </PRODUIT>
    <PRODUIT REF="02">
    <FOURNISSEUR>Motorola</FOURNISSEUR>
    </PRODUIT>
    </ITEM>


  • heliohelio Membre

    Merci à  tous, je n'avais pas fait attention à  attributeDict


    donc avec le code suivant 



    let REF = attributeDict["REF"]! as String

    je récupère bien les attributs des balises, impeccable.


Connectez-vous ou Inscrivez-vous pour répondre.