来自 xml 的 NSDictionary 元素
Posted
技术标签:
【中文标题】来自 xml 的 NSDictionary 元素【英文标题】:NSdictionary element from xml 【发布时间】:2012-10-31 15:15:59 【问题描述】:我有一种情况,我从服务器获取数据作为 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 中访问这些值
【问题讨论】:
希望这篇文章对***.com/a/1549311/857865有帮助 你能解释一下你的问题吗? 尝试字符串 = [[dict objectForKey:@"Game"] objectForKey:@"userName"]; 我认为这里发生的事情是创建了嵌套字典,它的作用与 NSDictionary 相同 【参考方案1】:string = [[dict objectForKey:@"Game"] objectForKey:@"userName"];
使用Enumerator根据key进行迭代查找值或[[dict objectForKey:@"Game"] allKeys]
获取所有key
【讨论】:
For Root 获取了数组中字典的所有键,并获得了 objectAtIndex 0。谢谢【参考方案2】:如果你的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"]
【讨论】:
内部的值也可以改变,所以我需要找到根元素,这样我才能知道里面的元素会是......【参考方案3】:所以你希望结果是"ben"
,对吗?好吧,[dict objectForKey:@"Game"];
不是NSString
,而是NSDictionary
。您不会收到任何错误,因为 LLVM 无法在编译时检查它,因此它会愉快地构建。到字符串的转换发生在解析成格式字符串"%@"
的过程中。相反,你想要的是这样的:
string = [[dict objectForKey:@"Game"] objectForKey:@"name"];
编辑:从 cmets 中可以看出不同的问题...
或者您更需要"Game"
?在这种情况下
NSString* rootName = [[dict allKeys] firstObject];
总会给你正确的答案,因为永远只有一个根。
【讨论】:
以上是关于来自 xml 的 NSDictionary 元素的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSDictionary 元素缓慢创建 NSMutableArray
使用嵌套在 NSDictionary plist 中的数组中的第二个元素 [1] 的字符串填充 tableview
NSDictionary/NSMutableDictionary