TBXML解析,无法找到nextSibling

时间:2013-01-19 08:57:58

标签: iphone xcode xml-parsing tbxml

我要从网上解析这个XML:

<trasporto>
 <condizioni id="0">
  <data>    </data>
  <titolo>  </titolo>
  <testo>   </testo>
  <sezione> </sezione>
 </condizioni>

 <condizioni id="1">
  <data>    </data>
  <titolo>  </titolo>
  <testo>   </testo>
  <sezione> </sezione>
 </condizioni>
 ........
 ........
 ........
</trasporto>

我需要来自每个 condizioni data / titolo / testo / sezione 字段

这是我的代码:

    ..............

    //responseString contains the text fetched from the web
NSData *data = [responseString dataUsingEncoding:NSUTF8StringEncoding];
    tbxml = [[TBXML alloc]initWithXMLData:data];

    if (tbxml.rootXMLElement)
        [self traverseElement:tbxml.rootXMLElement];
    [tbxml release];
}

    -(void) traverseElement:(TBXMLElement *)element {
    NSMutableArray *dataArr = [[NSMutableArray alloc]init];
    NSMutableArray *titoloArr = [[NSMutableArray alloc]init];
    NSMutableArray *testoArr = [[NSMutableArray alloc]init];
    NSMutableArray *sezioneArr = [[NSMutableArray alloc]init];

    do {
        NSLog(@"%@",[TBXML elementName:element]);
        if (element->firstChild)
            [self traverseElement:element->firstChild];
        if ([[TBXML elementName:element] isEqualToString:@"trasporto"]) {
            TBXMLElement *condizioni = [TBXML childElementNamed:@"condizioni" parentElement:element];
            TBXMLElement *data = [TBXML childElementNamed:@"data" parentElement:condizioni];
            TBXMLElement *titolo = [TBXML childElementNamed:@"titolo" parentElement:condizioni];
            TBXMLElement *testo = [TBXML childElementNamed:@"testo" parentElement:condizioni];
            TBXMLElement *sezione = [TBXML childElementNamed:@"sezione" parentElement:condizioni];

            [dataArr addObject:[TBXML textForElement:data]];
            [titoloArr addObject:[TBXML textForElement:titolo]];
            [testoArr addObject:[TBXML textForElement:testo]];
            [sezioneArr addObject:[TBXML textForElement:sezione]];

            NSLog(@"data: %@",dataArr);// [TBXML textForElement:data]);
            NSLog(@"titolo: %@",titoloArr);//[TBXML textForElement:titolo]);
            NSLog(@"testo: %@",testoArr);//[TBXML textForElement:testo]);
            NSLog(@"sezione: %@",sezioneArr);//[TBXML textForElement:sezione]);
           // condizioni = condizioni -> nextSibling;
        }
    } while ((element = element->nextSibling));
    }

但是通过这种方式,我只能解析第一个 condizioni ,即id = 0的那个。看来我无法找到下一个兄弟姐妹。 哪里是我的错???

1 个答案:

答案 0 :(得分:0)

......这就是答案!:

- (void) traverseElement:(TBXMLElement *)element {
NSMutableArray *dataArr = [[NSMutableArray alloc]init];
NSMutableArray *titoloArr = [[NSMutableArray alloc]init];
NSMutableArray *testoArr = [[NSMutableArray alloc]init];
NSMutableArray *sezioneArr = [[NSMutableArray alloc]init];

TBXMLElement *condizioni = element->firstChild;
do {
    TBXMLElement *data = [TBXML childElementNamed:@"data" parentElement:condizioni];
    TBXMLElement *titolo = [TBXML childElementNamed:@"titolo" parentElement:condizioni];
    TBXMLElement *testo = [TBXML childElementNamed:@"testo" parentElement:condizioni];
    TBXMLElement *sezione = [TBXML childElementNamed:@"sezione" parentElement:condizioni];

    [dataArr addObject:[TBXML textForElement:data]];
    [titoloArr addObject:[TBXML textForElement:titolo]];
    [testoArr addObject:[TBXML textForElement:testo]];
    [sezioneArr addObject:[TBXML textForElement:sezione]];

} while ((condizioni = condizioni->nextSibling));