0

我正在尝试使用 TBXMLParser 解析此提要:http : //missing.amberalertnederland.nl/nl/index.rss。为此,我使用以下代码:

- (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 的指南(我认为我做得正确)也将受到欢迎。

4

1 回答 1

1

我从未使用过 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;
}
于 2011-11-07T10:33:22.237 回答