【问题标题】:Parsing XML Inner XML tags Objective-C解析 XML 内部 XML 标签 Objective-C
【发布时间】:2012-02-12 17:12:39
【问题描述】:

我想在以下 XML 中为每个站创建一个 NSDictionary 或 (NSArray) 充满 NSDictionary 对象:

<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/

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

谢谢。

【问题讨论】:

    标签: iphone objective-c ios xml parsing


    【解决方案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"]);
    }
    

    希望有帮助:)

    【讨论】:

    • 很棒的答案谢谢,不知道 [[dictXML objectForKey:@"stations"] objectForKey:@"station"];将返回一个包含多个条目的数组!再次感谢。
    • 来自代码.. 如果你NSLog(dictXML) 你会看到它的字典名为 stations 并且在其中是另一个名为 station 的字典其中包含字典数组。XMLReader 的规则是,当一个标签被重复时,它会创建一个数组,它是一个带有标签键的字典。
    【解决方案2】:

    最好的方法是创建映射到每个标签的NSObject 的子类。这会比使用字典和数组更干净。

    【讨论】:

    • 是的,听起来不错,使用 CoreData 对吗?我如何实际将 XML 数据映射到 CoreData?
    • @AdamWaite 如果您要存储信息,那么是的,您应该使用 Core Data,首先设计数据库并使用向导自动为您创建类。然后您可以使用 nsmanagedobject 创建新实例并设置值。否则,如果您不打算长时间存储它,只需自己创建类即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2015-04-28
    • 1970-01-01
    • 2013-07-07
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多