0

XMLパーサーから抽出された次の辞書があります。github ライブラリを使用して、この次のリンクから XML ファイルを解析しました。

XML から NSDictionary へのパーサー ライブラリ

 Quiz = { 
questions = (
    {
    "@id" = 1;
    answer = D;
    A = "Under the rock";
    B = "Trees";
    C = "Mountain";
    D = Water;
    question = "Where does the fish live?";
    },
    {
    "@id" = 2;
    answer = D;
    A = "Four";
    B = "Two";
    C = "Six";
    D = Three;
    question = "How many legs for a rabbit?";
    },......
    };

キーの質問、回答、オプション 1 ~ 4 のオブジェクトを取得しようとしています。しかし、どうにかして値を渡すことができません。

for (NSString * key in xmlDictionary) {
        NSDictionary * subDict = [xmlDictionary objectForKey:@"questions"];
        NSLog(@"Correct Answers \n\n%@", [subDict objectForKey:@"answer"]);
        // all your other code here.
    }

値が返されているとは思わない。実際には、その xml 内に 10 個の要素があり、解析中に 10 個の要素があることが示されます。ただし、xmlDictionary をカウントしようとすると、1 が返されます。ここで何が問題なのかわかりませんか?

また、@id に依存するすべての値を抽出するにはどうすればよいですか?

混乱している!!!

更新: XML ファイルで ... タグを ... に変更しました

NSDictionary *currentObject;
    if (rowIndex < countXML)
    {
        currentObject=[muteArr objectAtIndex:rowIndex];
    }
    else
    {
        [self performSegueWithIdentifier:@"simple" sender:self];
    }

    NSString *questionLbl = [currentObject objectForKey:@"question"];
    NSString *op1Lbl = [currentObject objectForKey:@"A"];
    NSString *op2Lbl = [currentObject objectForKey:@"B"];
    NSString *op3Lbl = [currentObject objectForKey:@"C"];
    NSString *op4Lbl = [currentObject objectForKey:@"D"];
    NSString *answer = [currentObject objectForKey:@"answer"];
    NSString *questNoLbl = [currentObject objectForKey:@"@ID"];

questionID.text = [@"Question # " stringByAppendingString:questNoLbl];
    question.text = questionLbl;

    [answer1 setTitle:op1Lbl forState:UIControlStateNormal];
    [answer2 setTitle:op2Lbl forState:UIControlStateNormal];
    [answer3 setTitle:op3Lbl forState:UIControlStateNormal];
    [answer4 setTitle:op4Lbl forState:UIControlStateNormal];

これで、各質問を取得して QuizViewController に表示する方法を含むこのコードができました。ユーザーがボタンを押すと、新しいコントローラーにセグエし、答えが正しいかどうかを表示し、ResultViewController の [続行] ボタンをクリックすると QuizViewController に戻ります。これで、これらすべてのセットアップが完了しました。

ResultViewController で答えが正しいかどうかを表示するようになりました。

4

1 に答える 1

1

この行で

NSDictionary * subDict = [xmlDictionary objectForKey:@"questions"];

あなたは同じ辞書を取り戻します、あなたはすでに持っています。

これを試して:

for (NSString * key in xmlDictionary) {
    NSDictionary * subDict = [xmlDictionary objectForKey:key];
    NSLog(@"Correct Answers \n\n%@", [subDict objectForKey:@"answer"]);
    // all your other code here.
}

編集した XML 構造を使用して、次のようにする必要があります。

NSDictionary * rootDict = [xmlDictionary objectForKey:@"questions"];
for (NSString * key in rootDict) {
        NSDictionary * subDict = [rootDict objectForKey:key];
        NSLog(@"Correct Answers \n\n%@", [subDict objectForKey:@"answer"]);
        // all your other code here.
    }
于 2013-03-21T07:42:33.817 に答える