2010-10-25 5 views
0

Hey tout le monde, j'ai des problèmes avec TBXML et While. J'essaye d'analyser quelques nœuds de XML. Mon XML est la suivante:TBXML Alors que le problème

<teste> 

Mais quand je mets tout, mon application se bloque juste.

itemsList = [[NSMutableArray alloc] init]; 

TBXML * tbxml = [[TBXML tbxmlWithURL:[NSURL URLWithString:@"http://localhost/dev/http/test.xml"]] retain]; 
TBXMLElement * rootXMLElement = tbxml.rootXMLElement; 

TBXMLElement * comentarios = [TBXML childElementNamed:@"comentarios" parentElement:rootXMLElement]; 

while (comentarios != nil) { 
    TBXMLElement * comentario = [TBXML childElementNamed:@"comentario" parentElement:comentarios]; 

    NSString * descText = [TBXML textForElement:comentario]; 

    [itemsList addObject:descText]; 

}

im Que faire le mal?

+0

Je n'ai pas utilisé TBXML mais votre boucle while semble ne jamais s'exécuter (si comentarios est nul) ou ne jamais sortir (si comentarios n'est pas nul). Quel est exactement le "problème" que vous obtenez? – Anna

Répondre

0

Vous devez obtenir le premier enfant avec childElementNamed, puis parcourir le reste via nextSiblingNamed. Voici une méthode pratique, je l'ai écrit qui utilise la nouvelle API de bloc, pourrait être intéressant pour vous:

+(void) iterateSiblingsWithName:(NSString*)name forNodePath:(NSString*)path fromParent:(TBXMLElement*)node withBlock:(TBXMLElementIterator)block 
{ 
    TBXMLElement* element = (path != nil) ? [TBXML nodeForPath:path fromParent:node] : node; 
    if (!element) 
     { 
       return; 
     } 
     TBXMLElement* valuenode = [TBXML childElementNamed:name parentElement:element]; 
     if (!valuenode) 
     { 
       return; 
     } 
     do 
     { 
     block(valuenode); 
     } 
     while (valuenode = [TBXML nextSiblingNamed:name searchFromElement:valuenode]); 
} 
@end 
0
[itemlist retain]; 

je pense que cela va résoudre votre problème.

Questions connexes