在我的应用程序中,我从XML获取电台信息。
为了证明我的问题,我将使用两个广播电台:一个叫做“圣诞节经典”,一个叫做“圣诞节电源”。
当我使用以下代码获取JUST圣经经典并将其加载到我的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];
}
然而,当我试图通过实施以同样的方式(同时)获得“圣诞节力量”时:
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];
}
这是我得到的结果:
我的桌面视图加载了,但我没有圣诞节经典列表和圣诞节电力列表,而是获得了2个圣诞节经典列表..为什么会发生这种情况?我做错了什么?有没有更好的方法来解决这个问题?我正在处理的所有工作站都位于/Station
我只需要能够指定要带回哪些,我不想要返回100个列表,我只想要我指定的那些....
答案 0 :(得分:1)
我认为你的代码中只有一个小错误。虽然您有两个不同的节点集nodes
和node2
,但在两种情况下都会迭代第一个节点集:
for(DDXMLNode* node in nodes)
我建议您将第二个迭代器更改为
for(DDXMLNode* node in node2)
看看会发生什么。