Анализ XML-тегов XML-объектов Objective-C
Я хотел бы создать NSDictionary или (NSArray), полный объектов NSDictionary для каждой станции в следующем XML:
<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 с одним объектом и одним ключом - "станциями", но я хочу NSDictionary (или NSArray) NSDictionarys.
Я использую парсер XML от Troy Brant - http://troybrant.net/blog/2010/09/simple-xml-to-nsdictionary-converter/
Я предполагаю, что это будет связано с некоторыми циклами, но я не совсем уверен, как подойти к этой проблеме. Любая помощь или указатели в правильном направлении была бы высоко оценена.
Благодарю.
Я также использую XMLReader, это очень легко понять
Я посмотрел ваш xml, и я предполагаю, что вы хотите использовать массив тегов станции.
Вот мое решение:
NSDictionary *dictXML= [XMLReader dictionaryForXMLString:testXMLString error:&parseError];
NSArray *arrStation = [[dictXML objectForKey:@"stations"] objectForKey:@"station"];//this would return the array of station dictionaries
Теперь, когда у вас есть массив тегов станции, вы можете делать то, что хотите, например, отображая весь идентификатор:
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"]);
}
надеюсь, это поможет :)
Лучший способ - создать подклассы NSObject
которые сопоставляются с каждым тегом. Это было бы более чистым, чем использование Словари и Массивы.
- Вопросы
- Objective-c
- Анализ XML-тегов XML-объектов Objective-C