【发布时间】:2013-12-01 15:03:58
【问题描述】:
我想对一个 NSXMLParser 进行编程,而我的数据位于一个 NSString(编码)中。
如果我将 NSString 放到 NSLog 中,它会给我所需的正确行。但是,当我想使用来自该 NSString 的数据启动 Parser 时,它不会启动。
这是我的代码:
界面:
@interface StundenplanParser () <NSXMLParserDelegate>
@end
从 ViewController 调用的方法:
-(void)parserStart
{
// Create your request string with parameter name as defined in PHP file
NSString *myRequestString = [NSString stringWithFormat:@"matr=%@&pressme=%@",@"33886",@"S T A R T"];
// Create Data from request
NSData *myRequestData = [NSData dataWithBytes: [myRequestString UTF8String] length: [myRequestString length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: @"http://www2.htw-dresden.de/~rawa/cgi-bin/auf/raiplan_app.php"]];
// set Request Type
[request setHTTPMethod: @"POST"];
// Set content-type
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
// Set Request Body
[request setHTTPBody: myRequestData];
// Now send a request and get Response
NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
// Log Response
NSString *response = [[NSString alloc] initWithBytes:[returnData bytes] length:[returnData length] encoding:NSASCIIStringEncoding];
NSLog(@"Response:%@\n",[response substringToIndex:64]);
// If I would use NSASCIIStringEncoding in the following line, the data would be nil
NSData *data = [response dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
if (!parser) NSLog(@"Error with parser");
else NSLog(@"parser successfully initialised");
[parser setDelegate:self];
[parser parse];
}
注意:在我的响应中 (NSString*) 是我要解析的代码。如果我使用 NSLog 打印出来,我会看到网站的源代码..
现在我只想显示 NSXMLParser 找到的元素:
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSLog(@"found element: %@", elementName);
}
我希望我在代码中留下了 url 不是问题。我只想解析我大学的日程安排。
我希望你明白我的意思,你可以帮助我。
编辑:我的问题不是我没有得到 XML。我的问题是解析器无法启动。我编辑了代码。
EDIT2:响应的输出是:
2013-11-18 23:52:16.008 University[17210:70b] Response:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN
所以它似乎有效,但问题是将此编码为我需要初始化解析器的 NSData 实例。
EDIT3:
实现解析器后:parseErrorOccurred 在控制台中出现以下错误:
2013-11-19 08:58:26.190 University[17458:70b] ERROR while parsing: The operation couldn’t be completed. (NSXMLParserErrorDomain error 65.)
【问题讨论】:
标签: ios nsstring nsdata nsxmlparser