2010-10-25 56 views
0

嘿,任何人,我遇到一些TBXML和while的麻煩。 我想解析XML的幾個節點。我的XML是這樣的:TBXML雖然問題

<teste> 

但是,當我設置的同時,我的應用程序只是崩潰。

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]; 

}

什麼即時做錯了什麼?

+0

我還沒有使用過TBXML,但是你的while循環看起來好像永遠不會執行(如果comentarios是零)或者永遠不會退出(如果comentarios不是零)。到底什麼是「麻煩」? – Anna 2010-10-25 13:15:21

回答

0

您需要獲取childElementNamed的第一個子項,然後通過nextSiblingNamed迭代其餘的子項。這裏有一個方便的方法我寫了使用新的API塊,或許對你來說有趣:

+(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]; 

我認爲這將解決您的問題。