我想在以下XML中为每个工作站创建一个充满NSDictionary对象的NSDictionary或(NSArray):
<stations lastUpdate="1328986911319" version="2.0">
<station>
<id>1</id>
<name>River Street , Clerkenwell</name>
<terminalName>001023</terminalName>
<lat>51.52916347</lat>
<long>-0.109970527</long>
<installed>true</installed>
<locked>false</locked>
<installDate>1278947280000</installDate>
<removalDate/>
<temporary>false</temporary>
<nbBikes>12</nbBikes>
<nbEmptyDocks>7</nbEmptyDocks>
<nbDocks>19</nbDocks>
</station>
... more...
<station>
<id>260</id>
<name>Broadwick Street, Soho</name>
<terminalName>003489</terminalName>
<lat>51.5136846</lat>
<long>-0.135580879</long>
<installed>true</installed>
<locked>false</locked>
<installDate>1279711020000</installDate>
<removalDate/>
<temporary>false</temporary>
<nbBikes>12</nbBikes>
<nbEmptyDocks>4</nbEmptyDocks>
<nbDocks>18</nbDocks>
</station>
...
</stations>
实现这一目标的最佳方法是什么?现在我有一个带有一个对象和一个键的NSDictionary - “站”,但我想要NSDictionarys的NSDictionary(或NSArray)。
我正在使用Troy Brant的XML解析器 - http://troybrant.net/blog/2010/09/simple-xml-to-nsdictionary-converter/
我猜它会涉及某种循环,但我不确定如何解决这个问题。任何有关正确方向的帮助或指示都会非常感激。
感谢。
答案 0 :(得分:1)
我也使用XMLReader很容易理解
我看过你的xml,我假设你想使用站点标签数组。
这是我的解决方案:
NSDictionary *dictXML= [XMLReader dictionaryForXMLString:testXMLString error:&parseError];
NSArray *arrStation = [[dictXML objectForKey:@"stations"] objectForKey:@"station"];//this would return the array of station dictionaries
现在您拥有了站点标签数组,您可以执行所需的操作,例如显示所有ID:
for(int i=0;i<[arrStation count];i++){
NSDictionary *aStation = [arrStation objectAtIndex:i];
NSLog(@"id = %@",[aStation objectForKey:@"id"]);
}
你也可以使用快速枚举循环编写更少的代码:
for(NSDictionary *aStation in arrStation){
NSLog(@"id = %@",[aStation objectForKey:@"id"]);
}
希望有所帮助:)
答案 1 :(得分:0)
最好的方法是创建映射到每个标记的NSObject
子类。这比使用字典和数组更清晰。