1

我有一种情况,我从服务器获取数据作为 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 中访问这些值

4

3 回答 3

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

使用 Enumerator 迭代并根据键查找值或
[[dict objectForKey:@"Game"] allKeys]获取所有键

于 2012-10-31T15:37:29.857 回答
1

所以你希望结果是"ben",对吗?嗯,[dict objectForKey:@"Game"];不是一个,NSString而是一个NSDictionary。您不会收到任何错误,因为 LLVM 无法在编译时检查它,因此它会愉快地构建。到字符串的转换发生在解析成格式字符串的过程"%@"中。相反,你想要的是:

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

编辑:从评论中可以清楚地看出不同的问题......

还是您更需要"Game"?在这种情况下

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

总是会给你正确的答案,因为总是只有一个根。

于 2012-10-31T15:26:03.983 回答
1

如果您的 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"]

于 2012-10-31T15:28:48.127 回答