提问人:Fabio Poloni 提问时间:3/30/2011 更新时间:3/30/2011 访问量:3884
XML 分析 - NSXMLParserErrorDomain 错误 5
XML Parsing - NSXMLParserErrorDomain error 5
问:
我正在尝试解析XML文件。它运作得很好 - 直到今天......
以下是我开始解析 XML 的方法:
NSString *link = [[NSString alloc] init];
link = @"link_to_xml_file";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:link]
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:30.0];
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
以下是我如何使用接收到的数据:
- (void)connection:(NSURLConnection *)theConnection
didReceiveData:(NSData *)incrementalData
{
if (data == nil)
data = [[NSMutableData alloc] init];
[data appendData:incrementalData];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",actual]];
NSError *parseError = nil;
NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLString:[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] error:&parseError];
if (parseError != nil) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:[parseError localizedDescription] delegate:nil cancelButtonTitle:@"Zurück" otherButtonTitles:nil];
[alert show];
[alert release];
} //shows an alertview with NSXMLParserErrorDomain error 5
NSLog(@"String: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); //returns null
NSLog(@"Dictionary: %@",xmlDictionary); //returns null
NSMutableDictionary *tempDictForAddDate = [[NSMutableDictionary alloc] initWithDictionary:xmlDictionary];
NSDateFormatter *originalDate = [[NSDateFormatter alloc] init];
[originalDate setDateFormat:@"dd.MM.yyyy"];
NSString *today = [originalDate stringFromDate:[NSDate date]];
[tempDictForAddDate setObject:today forKey:@"updated"];
[tempDictForAddDate writeToFile:filePath atomically:YES];
self.contentList = [[tempDictForAddDate objectForKey:@"xmlObject"] objectForKey:@"event"];
[self sortContent];
}
XML文件在我的浏览器中工作。并且每个标签都是关闭的。没有任何错误,但我从未获得文件的数据。
我希望有人能帮忙。
马夫里克3。
答:
1赞
Roger
3/30/2011
#1
您(明智地)使用异步 url 连接,但这意味着您的 didReceiveData 委托将在数据传入时被多次调用,因此在您解析它时它不会完成。
您可能希望将分析移动到以下委托方法中。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
编辑:
正式验证你的 XML 总是一个好主意 - 我倾向于使用 w3c 工具 http://www.w3schools.com/xml/xml_validator.asp
此外,当过去工作的东西停止工作时,我总是问自己发生了什么变化?文件不同吗?它更大吗?您确定它存在于服务器上并且您的浏览器未使用缓存版本吗?
评论
0赞
Fabio Poloni
3/30/2011
但它一直有效到今天......我将解析代码扔进了 connectionDidFinishLoading: 中,但它仍然不起作用。当然,我没有更改任何代码,除了命令。.我该怎么办?
0赞
Roger
3/30/2011
好的,所以我猜它之所以有效,只是因为文件大小小于首次发送的数据量。把它移到正确的位置还是好的。我会再想一想......
0赞
Joe
3/30/2011
它被称为增量数据是有原因的。直到今天,你的反应可能较小。每次调用时,都需要将该 incrementalData 追加到 NSMutableData 对象。代码的其余部分只需要移动到- (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
0赞
Fabio Poloni
4/4/2011
我找到了解决方案 - 编码问题。谢谢。我会接受你的回答;-)
评论