我正在创建一个应用程序,显示来自特定Web服务的最新提要,我正在使用NSXMLParserDelegate协议用于此目的,我读了苹果文档,我也尝试了一些教程,但某些地方似乎出了问题,我不明白didEndElement,foundCharacters如何工作,反正我想显示图片,标题和内容,帖子的发布日期,我是xmlparsing的新手这里是我的 viewcontroller.h (我刚刚仅解析以下代码中的title元素)
@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)我应该在哪里声明我的titles数组,以便我可以添加单个标题对象。 didStartElement中[attributeDict objectForKey]的用途是什么?它为我的程序返回null
2)foundCharacters委托实际上做了什么?它附加了什么?
3)在didEndElement之后为什么编译器不能访问didStartElement而不是foundCharacters?
4)最后我应该实际使用NSXMLParserDelegate协议进行xml解析,其他像touchXML,TBXML和raywenderlich中提供的其他协议有什么不同?
我很抱歉这篇长篇文章,但我没有在网上得到任何令人满意的答案我的查询,我使用了所有的断点,并弄清楚如何来回调用代表,我需要一些有启发性的答案我的查询,谢谢抱歉
答案 0 :(得分:0)
1. 在开始解析之前声明你的数组。每当你遇到一个元素(一个xml标签)时,初始化元素(在类中设置一些BOOL,你可以识别出什么元素你正在读);
2. 找到的字符是作为标记值找到的字符。如果您知道要读取的是哪个元素(读取实例变量),则应将此字符串附加到临时NSMutableString并添加它只在元素结束时才到数组。
3。因为在到达新标记之前它没有开始寻找其他字符。
示例强>
我看到你很困惑,让我们说你有这个XML代码:
<person> mickey mouse </person>
当你遇到标签元素开始,然后你找到其他字符(不是整个字符串,只是字符串的一部分),直到字符串结束,然后当你遇到标签时元素结束。
答案 1 :(得分:0)
图像: image =&gt; didEnd中的字符是链接的名称,url位于didStart
中的属性中标题标签 didStart =&gt; didStart:html开始,每个标签都是html,直到标题标签的didEnd
内容: didStart =&gt; didStart:html开始,每个标签都是html,直到内容的didEnd