【问题标题】:How to get the HTML of a website and parse it with NSXMLParser如何获取网站的 HTML 并使用 NSXMLParser 解析它
【发布时间】:2014-08-29 18:55:40
【问题描述】:

我正在尝试从网站解析 XML(例如“http://www.kick-girl.com/?cat=3”)

我可以使用以下方法轻松获取 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

}

我该如何解决这个问题?

【问题讨论】:

    标签: ios afnetworking nsxmlparser


    【解决方案1】:

    显然,我从网页中获得的 XML 并不完美,其中包含一些奇怪的东西。尽管 Web 浏览器在读取 xml 时非常宽容,但 nsxmlparser 非常严格。

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

    【讨论】:

      猜你喜欢
      • 2019-11-10
      • 2013-12-19
      • 2012-02-21
      • 1970-01-01
      • 2011-02-14
      • 2011-11-11
      • 2012-07-27
      • 2015-12-02
      • 2013-09-15
      相关资源
      最近更新 更多