2014-08-29 43 views
0

我试图从一个网站(如“http://www.kick-girl.com/?cat=3”)如何获得一个网站的HTML和用的NSXMLParser

我可以使用易于获取XML解析XML解析它:

NSURL *url = [NSURL URLWithString:@"http://www.kick-girl.com/?cat=3"]; 
NSLog(@"%@", [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]); 

但是,当我尝试使用NSXMLParser时,它根本不起作用。我已经尝试将字符串转换为数据

NSString *s = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 
NSData *d = [s dataUsingEncoding:NSUTF8Encoding]; 
NSXMLParser *xmlparser = [NSXMLParser alloc] initWithData:d]; 
xmlparser.delegate = self; 
[xmlparser parse]; 

而且它仍然不起作用。 NSXMLParserDelegate方法不会被调用。 例如

- (void)parser:didStartElement:namespaceURI:qualifiedName:attributes: 

我一直在使用AFnetworking,看看是否能有助于

NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

AFHTTPRequestOperation *requestOp = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

requestOp.responseSerializer = [AFXMLParserResponseSerializer serializer]; 
[requestOp.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/xml", @"text/xml", @"text/html", nil]]; 
[requestOp setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSXMLParser *xmlparser = responseObject; 

    xmlparser.delegate = self; 
    [xmlparser parse]; //Delegate methods are not called for some reason... 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"OOPS: %@", error); 
}]; 
[requestOp start]; 

我不明白这是什么问题也试过。

我从-parser解析错误:parserErrorOccurred:

Error Domain=NSXMLParserErrorDomain Code=65 "The operation couldn’t be completed. (NSXMLParserErrorDomain error 65.)" UserInfo=0x8da6ce0 {NSXMLParserErrorLineNumber=2, NSXMLParserErrorColumn=17, NSXMLParserErrorMessage=attributes construct error 

}

我该如何解决这个问题?

回答

0

显然,我从网页获得的XML并不完美,并且有一些奇怪的东西。虽然浏览器在阅读XML时非常宽容,但nsxmlparser非常严格。

为了防止出现奇怪的东西,我只需要一个我想要的部分的子字符串,然后删除像新行回车和制表符的空格。并做了一些字符串操作来确保标签实际上是平衡的。