TBXML Parser для разбора RSS-канала - PullRequest
0 голосов
/ 07 ноября 2011

Я пытаюсь разобрать этот фид: http://missing.amberalertnederland.nl/nl/index.rss с TBXMLParser. Для этого я использую этот код:

- (void)loadRecords:(NSString *)records {
NSString *someXML = @"http://missing.amberalertnederland.nl/nl/index.rss";
TBXML *tbxml = [[TBXML tbxmlWithURL:[NSURL URLWithString:someXML]] retain];

records = [NSMutableArray array];
[records retain];

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

- (void) traverseElement:(TBXMLElement *)element {
do {
    if (element->firstChild) 
        [self traverseElement:element->firstChild];

    if ([[TBXML elementName:element] isEqualToString:@"item"]) {
        TBXMLElement *title = [TBXML childElementNamed:@"title" parentElement:element];
        TBXMLElement *link = [TBXML childElementNamed:@"link" parentElement:element];
        TBXMLElement *description = [TBXML childElementNamed:@"description" parentElement:element];

        [records addObject:[NSArray arrayWithObjects:
                            [TBXML textForElement:title],
                            [TBXML textForElement:link],
                            [TBXML textForElement:description],nil]];  
    }
} while ((element = element->nextSibling));  


NSLog(@"%@", records);
}

Однако массив записей возвращает только (нулевые) значения.

Любое руководство о том, как использовать TBXML (я думал, что я сделал правильно) также будет приветствоваться.

1 Ответ

1 голос
/ 07 ноября 2011

Я никогда не использовал TBXML, я использую SMXMLDocument

А вот метод, который я использую для разбора RSS:

- (NSArray *) arrayNewsItemsFromDocument:(SMXMLDocument *)document {
    SMXMLElement *channel = [document.root childNamed:@"channel"];

    NSArray *itemArray = [channel childrenNamed:@"item"];

    NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:[itemArray count]];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //Mon, 11 Jul 2011 00:00:00 +0200
    [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"EN"] autorelease]];
    [dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss ZZZZ"];

    for (SMXMLElement *item in itemArray) {     
        News *news = [[News alloc] init];
        news.title = [item childNamed:@"title"].value;

        NSString *text  = [item childNamed:@"encoded"].value;

        news.text =  [self stringFromHTMLString:text];
        news.articleUrl = [item childNamed:@"link"].value;
        NSString *dateString = [item childNamed:@"pubDate"].value;

        NSDate *date = [dateFormatter dateFromString:dateString];
        news.date = date;

        [mutableArray addObject:news];
        [news release], news = nil;
    }

    [dateFormatter release], dateFormatter = nil;

    NSArray *newsArray = [[mutableArray copy] autorelease];

    [mutableArray release], mutableArray = nil;

    return newsArray;
}
...