[英]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.