iphone - 使用 AFNetworking 解析 XML 文件

标签 iphone ios objective-c xml afnetworking

我正在使用 Yahoo api 制作一个小天气应用程序。这个 api 给了我一个 XML 文件。
我现在的问题是如何解析这个文件?
这是我到目前为止的代码。

 AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
        NSLog(@"success");
        XMLParser.delegate = self;
        [XMLParser parse];
        NSLog(@"xmlParser is %@",XMLParser);
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) {
        NSLog(@"failure with error %@",error);
    }];

您可以通过 here 找到 XML 文件。 .

希望有人可以帮助我

最佳答案

如果您希望使用 NSXMLParser 解析 XML,则需要有一个实现 NSXMLParserDelegate 的类。您可以为此使用 ViewController:

@interface ViewController : UIViewController <NSXMLParserDelegate>

然后使用此协议(protocol)提供的 SAX 方法,您可以在运行 [XMLParser parse] 时解析此 XML。 .这是您的 xml 的示例:
- (IBAction) makeRequest:(id)sender
{
    NSLog(@"Making request");
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://weather.yahooapis.com/forecastrss?w=2442047&u=c"]];
    AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
        XMLParser.delegate = self;
        [XMLParser parse];
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) {
       NSLog(@"failure with error %@",error);
   }];
    [operation start];
}


#pragma mark - Parsing lifecycle

- (void)startTheParsingProcess:(NSData *)parserData
{
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //parserData passed to NSXMLParser delegate which starts the parsing process

    [parser setDelegate:self];
    [parser parse]; // starts the event-driven parsing operation.
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    if ([elementName isEqualToString:@"yweather:astronomy"])
    {
        NSLog(@"Sunrise: %@,  Sunset: %@", [attributeDict valueForKey:@"sunrise"], [attributeDict valueForKey:@"sunset"]);
    }

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    self.tmpInnerTagText = string; // Make a temp NSString to store the text in-between tags
}

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

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
    NSLog(@"Paser Error = %@", parseError);
    //TODO: Create Alert message error
}

为了让 AFNetworking 支持您正在使用的 RSS xml,我必须按照该站点的说明将“application/rss+xml”添加到可接受的内容类型中:http://www.suushmedia.com/simple-rss-reader-with-afnetworking/

希望这可以帮助

关于iphone - 使用 AFNetworking 解析 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987399/

相关文章:

iphone - 核心图像过滤器应用

ios - 如何从带有动画的 View 更改 View

ios - 我在 TabBarController 中有 4 个 ViewController。当 TabBarController 被解除分配时,只有 3 个被解除分配。为什么?

iphone - 我们可以为 UITableview 的滚动条设置自定义图像吗?

ios - 从 UITableView 中包含多个单元格的行中删除所选图像

ios - 如何使用 Xcode51_Be​​ta 在 iOS 7.1 beta 设备中编译应用程序

ios - 如何在 iOS 应用程序中创建一个包含 3 列的表格?( Objective-C )

iphone - 使用 UIRequiredDeviceCapabilities Corona SDK 将应用程序提交到 App Store 时出错

ios - 解析 CloudKit 错误(CKError)

iphone - 如何避免在 UITableViewCell 上滑动删除调用 setEditing