В настоящее время я пытаюсь проанализировать строку xml, которая у меня уже есть (веб-вызовы не требуются). Мое приложение родной iPhone в Objective-C. Я настроил класс делегата NSXMLParser, который использует initWithData: xmlData. По какой-то причине первым и единственным обратным вызовом в моем делегате является синтаксический анализатор: parseErrorOccurnated со следующим текстом:
"Unable to download content from web site (Error code 5 )"
Очевидно, это не имеет смысла, поскольку я ничего не прошу из Интернета. Может быть, он все еще использует какое-то частное свойство URL для вызова чего-то?
Вот код:
Класс делегата XmlParser:
- (void)parseXmlString:(NSString *)xml parseError:(NSError **)error {
DEBUG_NSLog(@"XML Parser: Called with string: %@", xml);
NSData *xmlData = [xml dataUsingEncoding:NSASCIIStringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
// Set self as the delegate of the parser so that it will receive the parser delegate methods callbacks.
if (parser != nil) {
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
NSError *parseError = [parser parserError];
if (parseError && error) {
*error = parseError;
}
[parser release];
}
}
Вызывается с:
XmlParser *parser = [[XmlParser alloc] init];
NSError *error = nil;
[parser parseXmlString:aString parseError:&error];
if (error) {
DEBUG_NSLog(@"ERROR FROM PARSER");
}
где aString - строка NSString, содержащая XML (примечание: без заголовка).
Ошибка обратного вызова, который называется:
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
NSString * errorString = [NSString stringWithFormat:@"Unable to download content from web site (Error code %i )", [parseError code]];
DEBUG_NSLog(@"XML Parser ERROR: %@", errorString);
[parser abortParsing];
}
Когда код запускается, parseErrorOccururred сразу после [parser parse], и да, я реализовал каждый из didStartDocument, didEndDocument и т. Д.
Спасибо!
UPDATE:
При отладке создается впечатление, что создаваемый мною объект xmlData имеет размер 0 байт, хотя в строке xml, которую я передаю dataUsingEncoding, много данных. Проблема с кодировкой?
Один из элементов xml содержит вложенный html. Я думаю, что "и" может быть проблемой. Надеюсь, что "-> \" это исправит.
Ни экранирование кавычек, ни замена & & на & не устранила проблему. Может быть что-то не так с наличием тега в строке?