Parse des fichier xml contenant des balises sans et avec attributs

miramira Membre
13:10 modifié dans API UIKit #1
Bonjour à  tous,
Mon probléme est le suivant je parse 2 types de fichiers xml
Dans l'un j'ai la balise enclosure qui contient des attributs comme celle la:<enclosure url="http://www.lequipe.fr/Medias/Formule1/201108/270x197/casey-stoner-a-oublie-sa-frustration-des-qualif-il-a-signe-d.jpg"; type="image/jpeg" length="9920" />
et dans l'autre la balise enclosure est sans attributs comme ceci
<enclosure>
  <url>
      http://i.eurosport.fr/2011/08/13/749200 ... 58-238.jpg
  </url>
  <type>image/jpeg</type>
</enclosure>

Au moment du parse pour récupérer l'url de l'image dans les deux types j'utilise:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{<br />&nbsp; &nbsp; currentElement = [elementName copy];<br />&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp;  if ([elementName isEqualToString:@&quot;item&quot;]) {<br />&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp;  item = [[NSMutableDictionary alloc] init];<br />&nbsp; &nbsp; &nbsp; &nbsp; self.currentTitle = [[NSMutableString alloc] init];<br />&nbsp; &nbsp; &nbsp; &nbsp;  self.currentSummary = [[NSMutableString alloc] init];<br />&nbsp; &nbsp; &nbsp; &nbsp;  self.currentLink = [[NSMutableString alloc] init];<br />&nbsp; &nbsp; &nbsp; &nbsp;  self.currentIm = [[NSMutableString alloc] init];<br />&nbsp; &nbsp; &nbsp; &nbsp;  self.currentEn = [[NSMutableString alloc] init];<br />&nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp;  self.currentPodcastLink = [[NSMutableString alloc] init];<br />&nbsp; &nbsp;  }<br />&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp;  if ([currentElement isEqualToString:@&quot;enclosure&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp;  [currentEn appendString:[attributeDict objectForKey:@&quot;url&quot;]];<br />&nbsp; &nbsp; }<br /> }<br />

Et pour s'assurer que l'url de l'image est récupérée dans l'autre fichier( dans lequel la balise enclosure ne contient pas d'attributs) je fais ceci
<br />&nbsp;  - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{<br />&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp;  //NSLog(@&quot;Nous somme dans foundCharacters L&#039;élément courant est:%@&quot;,currentElement);<br />&nbsp; &nbsp;  if ([currentElement isEqualToString:@&quot;title&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp;  [self.currentTitle appendString:string];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp;  } else if ([currentElement isEqualToString:@&quot;link&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp;  [self.currentLink appendString:string];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp;  } else if ([currentElement isEqualToString:@&quot;description&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp;  [self.currentSummary appendString:string];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; else if ([currentElement isEqualToString:@&quot;image&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  val=0;<br />&nbsp; &nbsp;  }<br />&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp;  else if ([currentElement isEqualToString:@&quot;enclosure&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; val=1;&nbsp;  <br />&nbsp; &nbsp;  }<br />&nbsp; &nbsp;  else if ([currentElement isEqualToString:@&quot;url&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp;  if(val==1)<br />&nbsp; &nbsp; &nbsp; &nbsp; [self.currentIm appendString:string];<br />&nbsp; &nbsp; &nbsp; &nbsp;  <br />&nbsp; &nbsp; }<br />&nbsp; &nbsp;  <br />}<br />

Pour le premier type de fichier les images sont bien parsées et affichées par la suite mais l'application crache dés que je parse le fichier du 2 éme type à  cause de
if ([currentElement isEqualToString:@&quot;enclosure&quot;]) {<br />currentEn appendString:[attributeDict objectForKey:@&quot;url&quot;]];<br />&nbsp; &nbsp; }



Avez vous une proposition pour régler ceci? apparament qu'il faut ajoter une condition dans le if indiquant que le fichier est du 2 éme type(enclosure ne contient pas d'attributs) Mais laquelle?
Merci beaucoup pour toute aide

Réponses

  • AliGatorAliGator Membre, Modérateur
    13:10 modifié #2
    Vérifie tout simplement que [tt][attributeDict objectForKey:@url][/tt] n'est pas nil avant de faire ton appendString.
  • miramira Membre
    13:10 modifié #3
    Merci Aligator le pb est résolu maintenant
Connectez-vous ou Inscrivez-vous pour répondre.