Анализ XML-тегов XML-объектов Objective-C

80
9

Я хотел бы создать 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/

Я предполагаю, что это будет связано с некоторыми циклами, но я не совсем уверен, как подойти к этой проблеме. Любая помощь или указатели в правильном направлении была бы высоко оценена.

Благодарю.

спросил(а) 2021-01-19T15:27:50+03:00 9 месяцев, 1 неделя назад
1
Решение
65

Я также использую 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"]);
}

надеюсь, это поможет :)

ответил(а) 2021-01-19T15:27:50+03:00 9 месяцев, 1 неделя назад
46

Лучший способ - создать подклассы NSObject которые сопоставляются с каждым тегом. Это было бы более чистым, чем использование Словари и Массивы.

ответил(а) 2021-01-19T15:27:50+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема