簡體   English   中英

來自xml的NSdictionary元素

[英]NSdictionary element from xml

我有一種情況我從服務器獲取數據為xml,我使用https://github.com/Insert-Witty-Name將該數據轉換為NSDictionary

我的xml就像

<Game>
      <userid></userid>
      <name></name>
      <friendId></friendId>
      <friendName></friendName>
</Game>

值Game和所有其他項可以改變,所以首先我需要找出第一個元素的名稱是游戲=>

我現在通過上面的圖書館轉換了這個

 xmlString = [NSString stringWithFormat:@"<Game><userid>12</userid><userName>ben</userName><friendId>41</friendId><friendName>Ben1</friendName></Game>"];

NSDictionary *dict = [XMLReader dictionaryForXMLString:xmlString error:nil];

NSString *string;
string = [dict objectForKey:@"Game"];
NSLog(@"name is :%@",string);

而輸出是

{
friendId = 41;
friendName = Ben1;
userName = ben;
userid = 12;
}

我需要找出xml的根元素名稱以及如何使用objectForKey在NSDictionary中訪問這些值

string = [[dict objectForKey:@"Game"] objectForKey:@"userName"]; 

使用Enumerator迭代並根據鍵或值查找值
[[dict objectForKey:@"Game"] allKeys]獲取所有密鑰

所以你希望結果是"ben" ,對嗎? 好吧, [dict objectForKey:@"Game"]; 不是NSString而是NSDictionary 你沒有得到任何錯誤,因為LLVM無法在編譯時檢查這個錯誤,因此它很樂意構建。 轉換為字符串時會在解析為格式字符串"%@" 相反,你想要的是這個:

string = [[dict objectForKey:@"Game"] objectForKey:@"name"];

編輯:從評論中可以清楚地看到不同的問題......

或者你更喜歡"Game"嗎? 在這種情況下

NSString* rootName = [[dict allKeys] firstObject];

會給你總是正確的答案,因為總有一個根。

如果你的xml可以改變

這個:

<Game>
      <userid></userid>
      <name></name>
      <friendId></friendId>
      <friendName></friendName>
</Game>

變成這樣:

<Status>
      <userid></userid>
      <name></name>
      <friendId></friendId>
      <friendName></friendName>
</Status>

然后你必須使用allKeys方法動態查找字典鍵

像這樣:

[dict allKeys]

在我的第一個例子中,結果將是: ["Game"]和第二個: ["Status"]

如果你需要內部元素的鍵,就這樣做:

[[dict objectForKey:@"Game"] allKeys]

這將返回: ["userid","name","friendId", "friendName"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM