首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iOS中用NSXML解析数据

在iOS中用NSXML解析数据
EN

Stack Overflow用户
提问于 2014-01-25 17:01:43
回答 1查看 1.2K关注 0票数 0

我试图使用NSXMLR解析Wordpress RSS提要中的数据。我的问题是导出分析过的数据。到目前为止,

代码语言:javascript
复制
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

    currentElement = [elementName copy];

    if ([elementName isEqualToString:@"item"]){

        currentTitle = [[NSMutableString alloc] init];
        item = [[NSMutableDictionary alloc] init];
    }

}

这个类

代码语言:javascript
复制
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{


    if ([elementName isEqualToString:@"item"]){
        [item setObject:currentTitle forKey:@"title"];
    }

    [stories addObject:item];
}


- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    if ([currentElement isEqualToString:@"title"]){
        [currentTitle appendString:string];
    }

}

NSMutableArray *故事;NSMutableDictionary *项目;

所以在ViewDidLoad实现中,我有

代码语言:javascript
复制
//declare the object of allocated variable
NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"URL"]];// URL that given to parse.

//allocate memory for parser as well as
xmlParserObject =[[NSXMLParser alloc]initWithData:xmlData];
[xmlParserObject setDelegate:self];

//asking the xmlparser object to beggin with its parsing
[xmlParserObject parse];



NSLog(@"%@", [item objectForKey:@"title"]);

我的问题是,我只打印一个对象,我有倍数元素。我怎样才能让它扫描其中的每一个,并打印它们全部。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-25 17:40:18

如果我正确理解您的代码,item保存当前解析的项,数组stories保存所有项。

因此,您必须首先分配stories数组:

代码语言:javascript
复制
stories = [[NSMutableArray alloc] init];

然后执行解析(但应该添加错误检查):

代码语言:javascript
复制
NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"URL"]];
xmlParserObject =[[NSXMLParser alloc]initWithData:xmlData];
[xmlParserObject setDelegate:self];
if (![xmlParserObject parse]) {
    // Parsing failed, report error...
}

最后,打印数组的内容:

代码语言:javascript
复制
for (NSDictionary *story in stories) {
    NSLog(@"%@", [story objectForKey:@"title"]);
}

didEndElement方法可能应该如下所示:

代码语言:javascript
复制
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    if ([elementName isEqualToString:@"item"]){
        [item setObject:currentTitle forKey:@"title"];
        [stories addObject:item]; // <-- MOVED INTO THE IF-BLOCK
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21353425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档