我是Objective C和Stack Overflow的新手。我正在尝试解析在线XML文档。 Feed有5个条目,每个条目看起来像这样:
<item>
<title>the title goes here</title>
<link>http://thelink.com</link>
<guid>http://thelink.com</guid>
<category>News</category>
<description/>
<pubDate>Wed, 20 Nov 2013 20:36:00 +0430</pubDate>
<author>newsFeedAsc</author>
</item>
顶级节点是:
<rss version="2.0">
<channel>
<title>feed RSS</title>
<link>Feedlink.com</link>
<description>...</description>
<language>fa-ir</language>
<pubDate/>
<lastBuildDate/>
<docs>......</docs>
<generator>.....</generator>
<ttl>5</ttl>
<image>
<title>RSS</title>
<url>
......images/ver2/rsslogo.gif
</url>
<link>.......</link>
</image>
我使用以下代码:
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *urlString=@"http://thelink.thelink/api/news?news_type=2&limit=5";
NSURL *url = [NSURL URLWithString:urlString];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
element = elementName;
if ([element isEqualToString:@"item"])
{
item = [[NSMutableDictionary alloc] init];
title = [[NSMutableString alloc] init];
link = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ([element isEqualToString:@"title"]) {
[title appendString:string];
} else if ([element isEqualToString:@"link"]) {
[link appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"item"]) {
[item setObject:title forKey:@"title"];
[item setObject:link forKey:@"link"];
[feeds addObject:[item copy]];
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"%@",feeds);
}
现在,当我NSLog“feed”时,我得到一个空对象。当我NSLog“item”时,我得到了Feed的最后一个条目。如果我没错,整个XML树应该在“feed”中。
答案 0 :(得分:2)
您似乎永远不会创建实例并将其分配给feeds
,因此对于要添加的任何内容都不存在。因此,当您尝试添加每个item
时,实际上只是将其丢弃(实际上,只有当您为下一个item
创建新实例时)。这就是为什么你只有最后一项。
所以,基本上,一定要创建feeds
数组,以便在某处存储结果。