я знаю, что это не лучший способ ...
Я боролся в течение 2 дней, пытаясь адаптировать парсер XML к моей ситуации. Я не мог понять это, вероятно, потому что я так привык делать это в C #, и obj-c является новым для меня ...
Итак, то, что я сделал, было проанализировано как строка.
Я преобразовал весь XML-файл в NSString, затем использовал substringToIndex и substringFromIndex, чтобы выделить нужный мне раздел (аэропорт). Затем я использовал тег </record>
для создания массива <records>
, а затем написал цикл for, который брал нужные мне значения из каждого объекта массива, просто получая диапазон тегов.
Как я уже сказал, это было сумасшедшее решение, но я сделал все это в 26 строках кода, и оно прекрасно работает.
NSString *path = [[NSBundle mainBundle] pathForResource:@"dttps" ofType:@"xml"];
NSData *data = [[NSData alloc]initWithContentsOfFile:path];
NSString *xmlString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSRange range = [xmlString rangeOfString:searchedAirport];
xmlString = [xmlString substringFromIndex:range.location];
range = [xmlString rangeOfString:@"/airport_name"];
xmlString = [xmlString substringToIndex:range.location];
NSMutableArray *chartNames = [[NSMutableArray alloc]initWithCapacity:100] ;
NSMutableArray *pdfNames = [[NSMutableArray alloc]initWithCapacity:100] ;
NSArray *charts = [xmlString componentsSeparatedByString:@"</record>"];
NSString *tempString = [[NSString alloc]initWithFormat:@""];
int chartsCount = [charts count]-1;
int x;
for (x=0; x < chartsCount; x=x+1) {
tempString = [charts objectAtIndex:x];
range = [tempString rangeOfString:@"<chart_name>"];
tempString = [tempString substringFromIndex:range.location+12];
range = [tempString rangeOfString:@"</chart_name>"];
tempString = [tempString substringToIndex:range.location];
[chartNames addObject:tempString];
tempString = [charts objectAtIndex:x];
range = [tempString rangeOfString:@"<pdf_name>"];
tempString = [tempString substringFromIndex:range.location+10];
range = [tempString rangeOfString:@"</pdf_name>"];
tempString = [tempString substringToIndex:range.location-4];
[pdfNames addObject:tempString];
}
с последующей очисткой ...