В моем приложении я получаю информацию о радиостанции из XML.Ошибка при работе с узламиForXPath
Чтобы продемонстрировать свою проблему, я буду использовать две радиостанции: один из них называется «Рождественская классика», а один называется «Рождественская сила».
Когда я использую следующий код, чтобы получить только рождественские классики и загрузить его в мой tableView
он работает просто отлично:
DDXMLNode* rootNode = [xmlDoc rootElement];
NSArray* nodes = nil;
nodes = [rootNode nodesForXPath:@"child::Station[Name='Christmas Classics']" error:nil];
for(DDXMLNode* node in nodes)
{
Station* s = [[Station alloc] init];
DDXMLNode* nameNode = [[node nodesForXPath:@"Name" error:nil] objectAtIndex:0];
s.name = [nameNode stringValue];
DDXMLNode* bitRateNode = [[node nodesForXPath:@"Streams/Stream/BitRate" error:nil] objectAtIndex:0];
s.bitRate = [bitRateNode stringValue];
DDXMLNode* streamNode = [[node nodesForXPath:@"Streams/Stream/StreamUrl" error:nil] objectAtIndex:0];
s.streamURL = [streamNode stringValue];
[array addObject:s];
}
Однако, когда я пытаюсь получить «рождественскую Power» таким же образом (как в то же время) путем внедрения:
DDXMLNode* rootNode = [xmlDoc rootElement];
NSArray* nodes = nil;
nodes = [rootNode nodesForXPath:@"child::Station[Name='Christmas Classics']" error:nil];
for(DDXMLNode* node in nodes)
{
Station* s = [[Station alloc] init];
DDXMLNode* nameNode = [[node nodesForXPath:@"Name" error:nil] objectAtIndex:0];
s.name = [nameNode stringValue];
DDXMLNode* bitRateNode = [[node nodesForXPath:@"Streams/Stream/BitRate" error:nil] objectAtIndex:0];
s.bitRate = [bitRateNode stringValue];
DDXMLNode* streamNode = [[node nodesForXPath:@"Streams/Stream/StreamUrl" error:nil] objectAtIndex:0];
s.streamURL = [streamNode stringValue];
[array addObject:s];
}
NSArray *node2 = nil;
node2 = [rootNode nodesForXPath:@"child::Station[Name='Christmas Power']" error:nil];
for(DDXMLNode* node in nodes)
{
Station* b = [[Station alloc] init];
DDXMLNode* nameNode = [[node nodesForXPath:@"Name" error:nil] objectAtIndex:0];
b.name = [nameNode stringValue];
DDXMLNode* bitRateNode = [[node nodesForXPath:@"Streams/Stream/BitRate" error:nil] objectAtIndex:0];
b.bitRate = [bitRateNode stringValue];
DDXMLNode* streamNode = [[node nodesForXPath:@"Streams/Stream/StreamUrl" error:nil] objectAtIndex:0];
b.streamURL = [streamNode stringValue];
[array addObject:b];
}
Это результат, который я получаю:
My table view загружается, но вместо того, чтобы иметь список для Christmas Classics и список для Christmas Power, я получаю 2 рождественских классики. Почему это происходит? Что я делаю неправильно? Есть ли лучший способ сделать это? Все станции, на которых я работаю, находятся в одном корневом каталоге /Station
Мне просто нужно указать, какие из них нужно вернуть, я не хочу, чтобы возвращалось 100 списков, я просто хочу, чтобы те, что я указываю обратно ....
Aha! Должно быть, я это обновлюсь, как только приступлю к работе сегодня вечером. – vzm