目前,我正在设计一款能够阅读新闻Feed的简单应用。我正在使用的XML Feed是http://feeds.foxnews.com/foxnews/world?format=xml。
我要做的主要是从这个页面获取'title'元素和描述元素,并在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 :(得分: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对象是一个非常反复出现的问题,许多开源库已经为您完成了大部分繁重工作。