gpt4 book ai didi

ios - NSXMLParser 编码数据为字符串

转载 作者:行者123 更新时间:2023-11-29 12:59:55 26 4
gpt4 key购买 nike

我想编写一个 NSXMLParser,我在 NSString(已编码)中有数据。

如果我将 NSString 放入 NSLog,它会给出我需要的正确行。但是,当我想使用来自 NSString 的数据启动解析器时,它不会启动。

这是我的代码:

界面:

@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 实例。

编辑3:

实现解析器后:parseErrorOccurred 我在控制台中收到以下错误:

2013-11-19 08:58:26.190 University[17458:70b] ERROR while parsing: The operation couldn’t be completed. (NSXMLParserErrorDomain error 65.)

最佳答案

用谷歌翻译,网站

http://www2.htw-dresden.de/~rawa/cgi-bin/auf/raiplan_app.php

说“以 csv 格式创建时间表”并输入代码 33886 中的预科编号,它会返回一个网页,其中包含您要获取的数据:

  <Stunde>
<titel>Englisch C1 III/SI (w.o.)</titel>
<kuerzel>Engl_C1 Üw3/SI Technik</kuerzel>
<raum>S 334</raum>
<dozent>Kilian</dozent>
<datum>16.10.2013</datum>
<anfang>7:30</anfang>
<ende>9:00</ende>
</Stunde>

如果您提取此数据并形成一个新的 XML 字符串,那么 XML 解析器将运行。标签是数据开始的地方,最后一个跟在
之后,所以这段代码将提取出元素:

NSRange startRange = [dataString rangeOfString:@"<Stunde>"];
NSString *dataAfterHtml = [dataString substringFromIndex:startRange.location];

NSRange endRange = [dataAfterHtml rangeOfString:@"<br>"];
dataAfterHtml = [dataAfterHtml substringToIndex:endRange.location];

NSString *formattedXML = [NSString
stringWithFormat:@"<data>%@</data>",
dataAfterHtml];

现在给它解析器

NSData *data = [formattedXML dataUsingEncoding:NSUTF8StringEncoding];
xmlParser = [[NSXMLParser alloc] initWithData:data];

关于ios - NSXMLParser 编码数据为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20048202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com