Perdu avec NSXMLParser

Bonjour à  tous,



j'ai récupéré un vieux projet fait sous Xcode 3 et quelques dans Xcode 4.3.2, sous Mac OSX 10.7.3.



Ce projet parse un fichier XML avec NSXMLParser et "son" delegate NSXMLParserDelegate.



J'ai donc une classe qui adopte le protocole NSXMLParserDelegate et qui implémente 2 ou 3 méthodes du genre didStartElement.



Dans cette même classe, j'instancie un objet NSXMLParser, je set son delegate à  self et je lance le parse. Ai-je oublié quelque chose ? Parce que rien ne se passe ! J'a des logs avant et après le lancement du parse (le code y passe bien) par contre, les méthodes delegates ne sont JAMAIS appelées !



Une idée (même sans le code) ? Une piste ?

Réponses

  • AliGatorAliGator Membre, Modérateur
    Le XML que tu demandes de parser est valide ? Il n'est pas nil ? Il est conforme au standard XML ?



    Si ça se trouve il n'a rien à  parser, ou alors à  peine a-t-il commencé à  parser qu'il a un problème et ne peux mm pas atteindre le premier tag ? (erreur d'encodage lors de la récupération du XML, ...)
  • olofolof Membre
    j'y ai pensé, mais je pense pas que le problème soit là . J'ai chargé le fichier dans un NSString, je l'ai affiché dans le debugger et tout semble ok. Voilà  à  quoi il ressemble :


    <br />
    &lt;?xml version= &quot;1.0&quot; encoding=&quot;UTF8&quot;&gt;<br />
    &lt;article author=&quot;John Doe&quot;&gt;<br />
        &lt;para&gt;This is a very short article.&lt;/para&gt;<br />
    &lt;/article&gt;<br />
    
  • AliGatorAliGator Membre, Modérateur
    Et t'as fait un initWithData je suppose, tu as mis quoi comme encoding qd tu as transformé ton NSString en NSData ?

    Même la méthode "– parserDidStartDocument:" n'est pas appelée ?



    Si tu nous montrais les qques lignes de code correspondant à  ton parser ?
  • olofolof Membre
    J'ai essayé divers méthodes pour charger le fichier :


    <br />
    addressParser = [[NSXMLParser alloc] initWithContentsOfURL:Url];<br />
    




    puis :




    <br />
    NSError *error;<br />
    NSString* contents = [NSString stringWithContentsOfURL:UrlToFile encoding:NSUTF8StringEncoding error:&amp;error];<br />
    NSData* xmlData = [contents dataUsingEncoding:NSUTF8StringEncoding];<br />
    addressParser = [[NSXMLParser alloc] initWithData:xmlData];<br />
    




    Après, je fais ça :


    <br />
    [addressParser setDelegate:self];<br />
    [addressParser setShouldResolveExternalEntities:NO];<br />
    [addressParser setShouldProcessNamespaces:NO];<br />
    [addressParser setShouldReportNamespacePrefixes:NO];<br />
       <br />
    [addressParser parse]; // return value not used<br />
    [addressParser release];<br />
    




    J'ai ajouté la méthode parserDidStartDocument, elle n'est pas appelée non plus...
  • Heuu.. tu as oublié le ?>

    <?xml version= "1.0" encoding="UTF8" >
  • olofolof Membre
    Aaarrrgggghhhh !



    J'étais sûr que c'était un détail tout con... Le pire, c'est que j'ai repris ce bout de code XML sur un site (je ne sais plus lequel maintenant) !!!



    Merci
  • FKDEVFKDEV Membre
    'ldesroziers' a écrit:


    Heuu.. tu as oublié le ?>

    <?xml version= "1.0" encoding="UTF8" >




    Bien vu.



    Dans le delegate il y a une fonction appelée en cas d'erreur de parsing, il serait intéressant de savoir si elle était appelée dans ce cas.



  • olofolof Membre
    'FKDEV' a écrit:


    Bien vu.



    Dans le delegate il y a une fonction appelée en cas d'erreur de parsing, il serait intéressant de savoir si elle était appelée dans ce cas.




    J'ai implémenté ces deux méthodes :


    <br />
    - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {<br />
        NSLog(@&quot;Parse error...&quot;);<br />
    }<br />
    - (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validError {<br />
        NSLog(@&quot;Validation error...&quot;);<br />
    }<br />
    




    elles ne sont pas appelées !
Connectez-vous ou Inscrivez-vous pour répondre.