2010-11-03 5 views
0

J'ai un fichier XML qui ressemble à ceciUtilisation NSXMLParsers « trouvé CDATA » méthode

<comments> 
    <text> 
      <![CDATA[ 
       <!--cached-Tue, 02 Nov 2010 17:50:50 +0000--> 
       this is on the first line 
       <br /> 
       This is on the second line 
      ]]> 
    </text> 
    <text> 
      <![CDATA[ 
       <!--cached-Tue, 02 Nov 2010 17:50:50 +0000--> 
       this is on the first line 
       <br /> 
       This is on the second line 
      ]]> 
    </text> 
</comments> 

Comment puis-je extraire les données sur cette (abstraction faite un commentaire)

J'ai actuellement.

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock 
    {  
    if(!myCDATA) 
      { 
      myCDATA = [[NSMutableData alloc] init]; 
      } 
    [myCDATA appendData:CDATABlock]; 
    } 

Cependant, il ne semble jamais trouver la balise "]]>". Quand je casse, il n'appelle qu'une seule fois à foundCDATA.

Répondre

1

Définissez-vous ce point d'arrêt sur la ligne ci-dessous par hasard?

myCDATA = [[NSMutableData alloc] init]; 

il suffit d'ajouter un NSLog (@ « ») avant le test if (! MyCDATA) et définir un point d'arrêt là-dessus et je suis assez sûr que vous aurez deux callbacks.

Vous ne devriez pas vous attendre à ce que l'analyseur "trouve" la chaîne "]]>". Cela fait partie de l'élément CDATA.

Vous pouvez également mettre en œuvre cette

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 

et vérifier "texte".

Bravo ...

+0

Non seulement seulement une fois. Et j'ai aussi une méthode d'élément final. – endy

+0

Combien de fois votre didEnd est-il appelé avec "texte"? – nicktmro