解析XML内部XML标记Objective-C

时间:2012-02-12 17:12:40

标签: iphone objective-c ios xml parsing

我想在以下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/

我猜它会涉及某种循环,但我不确定如何解决这个问题。任何有关正确方向的帮助或指示都会非常感激。

感谢。

2 个答案:

答案 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子类。这比使用字典和数组更清晰。