使用nsxmlparserdelegate的提要阅读器

问题描述:

我正在创建一个应用程序,显示来自特定web服务的最新提要,我为此使用NSXMLParserDelegate协议,以及我阅读了苹果文档,并且也尝试了一些教程,但似乎有些事情要做错误的地方,我不明白怎么didEndElement,foundCharacters工作,反正我想显示图像,标题和内容,发布的发布日期,我是新手到xmlparsing这里是我的viewcontroller.h(我刚刚解析仅在下面的代码的标题元素)使用nsxmlparserdelegate的提要阅读器

@property(nonatomic,strong)NSString *currentElement; 
    @property(nonatomic,strong)NSString *currentTitle; 
    @property(nonatomic,strong)NSMutableArray *titles; 

viewDidLoad中

NSURL *url=[NSURL URLWithString:@"http://www.forbes.com/fast/feed"]; 
NSXMLParser *parser=[[NSXMLParser alloc]initWithContentsOfURL:url]; 
[parser setDelegate:self]; 
[parser parse]; 
NSLog(@"%d",titles.count); 

didStartElement

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 

self.currentElement=elementName; 

if ([self.currentElement isEqualToString:@"title"]) 
{ 

    self.currentTitle=[NSMutableString alloc]; 
    titles=[[NSMutableArray alloc]init]; 

    titles=[attributeDict objectForKey:@"title"]; 
} 
} 

foundCharacters

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 

self.currentElement=elementName; 

if ([self.currentElement isEqualToString:@"title"]) 
{ 

    self.currentTitle=[NSMutableString alloc]; 
    titles=[[NSMutableArray alloc]init]; 

    titles=[attributeDict objectForKey:@"title"]; 
} 
    } 

didEndElement

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
if([self.currentElement isEqualToString:@"title"]) 
{ 
    NSLog(@"%@",self.currentTitle); 


} 
} 

怀疑

1)我应该在哪里申报我的标题阵列,这样我可以添加个人称号反对。 didStartElement中[attributeDict objectForKey]的用法是什么?它返回null为我的程序

2)什么是foundCharacters委托实际上做什么?它附加了什么?

3)didEndElement之后,为什么编译器不能达到didStartElement而不是foundCharacters?

4)最后我应该为xml解析实际使用NSXMLParserDelegate协议,像其他人一样,touchXML,TBXML和raywenderlich中提供的其他解决方案有什么不同?

对于这篇长文章,我很抱歉,但是我还没有得到任何关于我的查询的令人满意的答案,我使用了所有的断点并想出了代表如何来回调用,我需要一些启发性的答案来解答我的疑问,感谢和抱歉

+0

为什么不直接使用[RSSKit](http://github.com/H2CO3/RSSKit)? – 2012-11-11 12:41:44

+0

@ H2CO3我该如何使用你的RSSKit?我应该把所有的文件拖入我的项目?除了在github上给出的解释外,还有其他信息可以在网上找到吗?感谢 – BoredToDeath

+0

是的,只需将文件添加到您的项目。我不知道任何其他文档,但是写在GitHub上应该就足够了。你必须真正实现这一个委托方法,就是这样。请注意,RSSKit不支持ARC,因此您应该关闭所有RSSKit文件的ARC。 – 2012-11-11 16:49:45

开始parse.Whenever你遇到一个元素(XML标签)之前声明你的阵列,初始化的元素(设置在类中的一些BOOL中,你可以识别哪些因素的方式你在阅读);

2.找到的字符是发现作为tag.If的价值,你知道你在读什么元素(读你的实例变量)的字符,你应该这个字符串添加到您的临时的NSMutableString,并将其添加到阵列只有当元素结束时。

3.因为在达到新标签之前它不会开始查找其他字符。

我看你都搞不清楚,让我们说,你有这样的XML代码:

<person> mickey mouse </person> 

当你遇到元素开始的标签,然后你发现其他字符(不整个字符串,只是字符串的一部分),直到字符串结束,然后当您遇到标签时,元素结束。

在didFindCharacters刚刚找到的字符添加到的NSMutableString和didEndElement你知道你结束了什么,一个变量设置为您找到

图像串: 图像=>在didEnd的性格都的名字链接,URL是在属性过去didStart

标题标签 didStart => didStart:HTML开始,每一个标签是HTML,直到标题标签的didEnd

内容: didStart => didStart: html开始了,每一个ta g是html直到内容的结束