上午在维护一个2012年的老项目,是因为公司线上的应用,今天出现了无法显示数据的问题,找到项目源码后一看,让我深感痛恶的xml数据解析啊!( ⊙ o ⊙ )!
开断点调试:
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
if (self.delegate && [self.delegate respondsToSelector:@selector(getSocialService_Fail:)]) {
[self.delegate getSocialService_Fail:serviceType];
}
}
error: use of undeclared identifier 'elementName'
error: 1 errors parsing expression
Printing description of parseError:
Error Domain=NSXMLParserErrorDomain Code=9 "(null)" UserInfo={NSXMLParserErrorLineNumber=5, NSXMLParserErrorColumn=14, NSXMLParserErrorMessage=xmlParseCharRef: invalid xmlChar value 11
经一步步调试发现是由于xml数据中的某节点Value数据格式有误!我这里是,后台数据中节点名为“Description”的字符串内容有“异常”字符!
后跟后台人员沟通,其修改了Description字段内容后,问题得以解决。
㊗️恭喜恭喜,这下解析成功了!
另外介绍一种方法,用于过滤指定字符串。
- (NSData *)filterSpecialCharacter:(NSMutableData *)data {
NSString *htmlCode = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// NSString *htmlCode = @"发发发达范德萨发的";
NSCharacterSet *filterCharacter = [NSCharacterSet characterSetWithCharactersInString:@""];
htmlCode = [[htmlCode componentsSeparatedByCharactersInSet:filterCharacter] componentsJoinedByString:@""];
NSMutableString *temp = [NSMutableString stringWithString:htmlCode];
NSData *finalData = [temp dataUsingEncoding:NSUTF8StringEncoding];
[data setData:finalData];
return data;
}