使用NSXMLParser从HTTPS URL解析XML?

时间:2009-01-07 11:29:05

标签: objective-c xml cocoa cocoa-touch parsing

我正在尝试直接从HTTPS URL解析XML,如下所示:

NSString *const URL = @"https://some/HTTPS/url";
NSURL* url = [NSURL URLWithString:URL];
NSXMLParser* parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser parse];

我为解析器提供了以下委托方法:

- (void) parser:(NSXMLParser *)parser 
didStartElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qualifiedName 
attributes:(NSDictionary *)attributeDict
{
    NSLog(@"Started parsing %@", elementName);
}

这似乎适用于HTTP URL,但没有显示HTTPS URL的结果。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:8)

  1. initWithContentsOfURL:...方法都不允许您从https服务器回复身份验证消息。请查看NSURLConnectionNSURLDownload,其中包含可帮助您处理身份验证的委托消息。

  2. 要详细了解如何使用网址与服务器进行通信,请阅读Introduction to the URL Loading System

  3. 就使用XML解析器解析HTML而言,它只能可靠地使用XHTML。因此,如果您正在创建和解析自己的XHTML文件,这些文件在大多数情况下都可以使用。但是,如果要从Internet加载任何HTML文件,则XML解析器通常无法解析该文件。您可能需要查看WebKit

答案 1 :(得分:4)

您应该使用NSURLConnection下载XML数据,然后解析输出而不是使用-initWithContentsOfURL:。

NSURLConnection更健壮,也允许你进行异步提取,你肯定应该这样做,-initWithContentsOfURL:将阻塞主线程。

答案 2 :(得分:1)

此外,大多数HTTPS服务器都会检查用户代理字符串,并且在未指定此类标头值时无法正常运行。在url请求中有一些(有效的)User-Agent字符串肯定会有所帮助。

答案 3 :(得分:0)

我不确定你是否正在进行iPhone编程,但是为了记录,在NSXMLParser类参考中(在iPhone 3.0 beta 2 SDK中),initWithContentsOfURL:(NSURL *)url执行 NOT 似乎已被弃用。