Разбор XML внутренних XML-тегов Objective-C - PullRequest
0 голосов
/ 12 февраля 2012

Я хотел бы создать 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 Троя Бранта - http://troybrant.net/blog/2010/09/simple-xml-to-nsdictionary-converter/

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

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

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

0 голосов
/ 12 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...