1

我正在创建一个显示来自特定 Web 服务的最新提要的应用程序,为此我使用 NSXMLParserDelegate 协议,我阅读了苹果文档,我也尝试了一些教程,但某处似乎出了问题,我不明白如何didEndElement,foundCharacters 工作吗,无论如何我想显示帖子的图像,标题和内容,发布日期,我是 xmlparsing 的新手,这是我的viewcontroller.h(我刚刚解析了以下代码中的标题元素)

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

查看didload

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);

开始元素

-(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"];
}
 }

发现字符

 -(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"];
}
  }

didEnd 元素

 -(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)最后我应该实际使用 NSXMLParserDelegate 协议进行 xml 解析,其他像 touchXML、TBXML 和 raywenderlich 中提供的其他协议会有所不同吗?

我很抱歉发了这么长的帖子,但是关于我的查询,我在网上没有得到任何令人满意的答案,我使用了所有的断点并弄清楚了代表是如何来回调用的,我需要一些有启发性的答案来回答我的查询,谢谢和抱歉

4

2 回答 2

0

在 didFindCharacters 中,只需将找到的字符添加到 NSMutableString 中,在 didEndElement 中,您知道您结束了什么并将变量设置为您找到的字符串

image: image => didEnd 处的字符是链接的名称,url 在didStart 过去的属性中

title-tag didStart => didStart : html 开始,每个标签都是 html,直到 title-tag 的 didEnd

content: didStart => didStart : html开始,每个标签都是html直到内容的didEnd

于 2012-11-11T14:03:24.073 回答
0

1.在开始解析之前声明你的数组。当你遇到一个元素(一个xml标签)时,初始化元素(在类中设置一些BOOL,以便你可以识别你正在阅读的元素);

2.找到的字符是作为标记值找到的字符。如果您知道正在读取的元素(读取实例变量),则应将此字符串附加到临时 NSMutableString 并仅在元素结束时将其添加到数组中.

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

例子

我看到你很困惑,假设你有这个 XML 代码:

<person> mickey mouse </person>

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

于 2012-11-11T12:44:35.120 回答