2012-02-12 139 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