TBXML虽然存在问题

时间:2010-10-25 12:52:55

标签: objective-c while-loop

嘿嘿,我在使用TBXML时遇到了一些问题。 我正在尝试解析几个XML节点。我的XML是这样的:

<teste> 

  1   2   3       

但是当我设置的时候,我的应用程序就崩溃了。

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

}

我做错了什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

[itemlist retain];

我认为它会解决你的问题。