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"]; 

列挙子を使用して、キーに基づいて値を反復して検索するか
[[dict objectForKey:@"Game"] allKeys]、すべてのキーを取得します

于 2012-10-31T15:37:29.857 に答える
1

結果を にしたいのですが"ben"、正しいですか? では[dict objectForKey:@"Game"];なくNSStringNSDictionaryです。LLVM がコンパイル時にこれをチェックする方法がないため、エラーは発生せず、問題なくビルドされます。文字列への変換は、フォーマット文字列への解析で行われます"%@"。代わりに、あなたが望むのはこれです:

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

編集:コメントから明らかになる別の質問...

それとも、むしろ必要"Game"ですか?その場合

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

ルートは常に 1 つしかないため、常に正しい答えが得られます。

于 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"]。2番目の例では:["Status"]

内部要素のキーが必要な場合は、次のようにします。

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

これは以下を返します:["userid","name","friendId", "friendName"]

于 2012-10-31T15:28:48.127 に答える