来自 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 中提取信息

使用嵌套在 NSDictionary plist 中的数组中的第二个元素 [1] 的字符串填充 tableview

NSDictionary/NSMutableDictionary

来自 plist 文件的 NSArray 或 NSDictionary

NSDictionary 到 XML 字符串