2009-01-07 71 views
4

我试图直接从HTTPS URL解析XML,如下所示:使用NSXMLParser从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的结果。

我该如何解决这个问题?

回答

8
  1. initWithContentsOfURL:...方法都不允许您从https服务器接收认证消息。因此,请查看NSURLConnectionNSURLDownload,它们具有可帮助您处理身份验证的委托消息。

  2. 要了解有关使用URL与服务器进行通信的更多信息,请参阅Introduction to the URL Loading System

  3. 就XML解析器解析HTML而言,它只能可靠地使用XHTML。所以,如果你正在创建和解析你自己的XHTML文件,而这些文件应该在大多数情况下工作。但是,如果您从互联网加载任何HTML文件,那么XML解析器通常无法解析文件。你可能想看看WebKit

+0

- [NSString initWithContentsOfURL:]与 - [NSXMLParser initWithContentsOfURL:]不同。后者不推荐使用,并且不使用编码:error:和usedEncoding:error:variants。 – 2009-04-02 20:13:39

4

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

NSURLConnection更强大,并且还允许您执行异步提取,您应该一定要这样做,-initWithContentsOfURL:将阻止主线程。

+0

关于阻塞主线程的观点可能比其他观点更重要。 – ohadpr 2011-04-08 16:43:25

1

此外,大多数HTTPS服务器都会检查User-Agent字符串,并且在没有指定此类标头值时不能正常播放。它确实有助于在url请求中包含一些(有效的)User-Agent字符串。

0

我不知道,如果你正在做的iPhone编程或没有,但备案,在的NSXMLParser类参考(在iPhone 3.0测试版2 SDK),initWithContentsOfURL:(NSURL *)网址确实似乎已被弃用。