2014-09-03 105 views
0

目前我正在设计一个将读取新闻提要的简单应用程序。我正在使用的XML Feed是... http://feeds.foxnews.com/foxnews/world?format=xml解析TableView的XML元素

我期待做的事情实质上是从此页面的'标题'元素和说明'元素,并在TableView中使用它们。

这是我目前有:

-(void)parserDidStartDocument:(NSXMLParser *)parser{ 
    _elementsArray = [[NSMutableArray alloc]init]; 
} 

-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString *)string{ 
    if (!_currentString) { 
     _currentString = [[NSMutableString alloc]init]; 
    } 
    [_currentString appendString:string]; 
} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString  *)namespaceURI qualifiedName:(NSString *)qName{ 

    if ([elementName isEqualToString:@"title"]) { 
     [_elementsArray addObject:_currentString]; 
     _currentString=nil; 
     return; 

    } 
    if ([elementName isEqualToString:@"description"]) { 
     [_elementsArray addObject:_currentString]; 
     _currentString=nil; 
     return; 
    } 
    _currentString = nil; 
} 

-(void)parserDidEndDocument:(NSXMLParser *)parser{ 
    for (NSString*string in _elementsArray) { 
     NSLog(@"%@",string); 
    } 
    _elementsArray = nil; 
} 

我得到的这样的输出,这是没有问题的。

我的问题是,每个元素都添加到一个新的NSArray条目中。我将如何将两个元素添加到一个条目? (是否可以使用密钥?)

+0

你的意思是新的'NSArray'条目吗?我在代码中看不到'NSDictionary'。 – 2014-09-03 10:27:37

+0

对不起,是的。在此之后,我将尝试将每个条目添加到字典中(我不确定是否需要) – TinMan7757 2014-09-03 10:39:09

回答

0

您可以使用临时NSDictionary将标题和说明一起存储为每个项目,并将字典添加到_elementsArray

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    if ([elementName isEqualToString:@"item"]) { 
     _currentDict = [NSMutableDictionary dictionary]; 
     return; 
    } 
} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString  *)namespaceURI qualifiedName:(NSString *)qName{ 
    if ([elementName isEqualToString:@"item"]) { 
     [_elementsArray addObject:_currentDict]; 
     _currentDict=nil; 
     return; 
    } 
    if ([elementName isEqualToString:@"title"]) { 
     _currentDict[@"title"] = _currentString; 
     _currentString=nil; 
     return; 

    } 
    if ([elementName isEqualToString:@"description"]) { 
     _currentDict[@"description"] = _currentString; 
     _currentString=nil; 
     return; 
    } 
    _currentString = nil; 
} 

// Other methods left unchanged 

这应该输出类似:

NSArray (
    NSDictionary { 
     @"title": @"First title", 
     @"description": @"A news article" 
    }, 
    NSDictionary { 
     @"title": @"Second title", 
     @"description": @"Another interesting article" 
    } 
) 

未经检验的,但我希望你的想法。

还要注意,将XML(或RSS)文件解析为本地ObjC对象是一个非常反复出现的问题,并且大量的开源库已经为您完成了大部分繁重的工作。

+0

好的,非常感谢,请问您会为此功能推荐任何第三方库吗? – TinMan7757 2014-09-03 11:36:17

+0

如果您的Feed真实RSS:http://cocoapods.wantedly.com/?utf8=%E2%9C%93&o=popularity&q=rss else http://cocoapods.wantedly.com/?utf8=%E2%9C% 93 O =普及&q = XML – 2014-09-03 12:41:58