2012-02-12 144 views
0

我想创建一个NSDictionary或(NSArray中)全NSDictionary的对象为以下XML每个站:解析XML内XML标签的Objective-C

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

我猜它会涉及到某种一些循环,但我真的不知道如何处理这个问题。任何帮助或指针在正确的方向将不胜感激。

谢谢。

回答

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"]); 
} 

希望帮助:)

+0

梦幻般的答案谢谢,不知道[[dictXML objectForKey:@“stations”] objectForKey:@“station”];会返回一个包含多个条目的数组!再次感谢。从代码中得到 – 2012-02-13 12:42:26

+0

..如果你使用NSLog(dictXML),你会发现它的名为** stations **的字典,里面是另一个名为** station **的字典,其中包含字典数组......该规则XMLReader是一个标签重复的时候,它会创建一个数组,它是一个带有标签键的字典。 – otakuProgrammer 2012-02-15 06:08:20

0

最好的办法是创建映射到每个标签的NSObject的子类。这将比使用字典和数组更清洁。

+0

是的,这听起来是对的,使用CoreData的权利?我如何真正将XML数据映射到CoreData? – 2012-02-12 17:25:26

+1

@AdamWaite如果您要存储信息,那么您应该使用核心数据,首先设计数据库并使用向导为您自动创建类。然后您可以使用nsmanagedobject创建新实例并设置值。否则,如果你不打算长时间存储它,只需自己创建类。 – 2012-02-12 17:34:13