使用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中提供的其他解决方案有什么不同?
对于这篇长文章,我很抱歉,但是我还没有得到任何关于我的查询的令人满意的答案,我使用了所有的断点并想出了代表如何来回调用,我需要一些启发性的答案来解答我的疑问,感谢和抱歉
开始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直到内容的结束
为什么不直接使用[RSSKit](http://github.com/H2CO3/RSSKit)? – 2012-11-11 12:41:44
@ H2CO3我该如何使用你的RSSKit?我应该把所有的文件拖入我的项目?除了在github上给出的解释外,还有其他信息可以在网上找到吗?感谢 – BoredToDeath
是的,只需将文件添加到您的项目。我不知道任何其他文档,但是写在GitHub上应该就足够了。你必须真正实现这一个委托方法,就是这样。请注意,RSSKit不支持ARC,因此您应该关闭所有RSSKit文件的ARC。 – 2012-11-11 16:49:45