0

次のxmlがあり、属性を持つノードの値をフェッチしたいと思います。

<quiz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="quiz.xsd">
    <mchoice>
        <question>What is the capital city of Australia?</question>
        <answer>Sydney</answer>
        <answer correct="yes">Canberra</answer>
        <answer>Melbourne</answer>
        <answer>Gold Coast</answer>
    </mchoice>
    <mchoice>
        <question>Launceston is the second largest city in which Australian state?</question>
        <answer>Victoria</answer>
        <answer>New South Wales</answer>
        <answer correct="yes">Tasmania</answer>
        <answer>Western Australia</answer>
    </mchoice>
</quiz>


public class Question
{
    public string QuestionText { get; set; }
    public List<string> Answers { get; set; }
    public string CorrectAnswer { get; set; }

}

次のクエリを試しましたが、CorrectAnswerファイルでnullが発生します

var questions = from docs in _doc.Descendants("mchoice")
                        let answers = _doc.Elements("answer")
                        select new Question
                        {
                            QuestionText = docs.Element("question").Value,
                            Answers = docs.Elements("answer").Select(a => a.Value).ToList(),
                            CorrectAnswer=docs.Elements("answer").Where(x=>x.Attribute("correct").Value=="yes").Select(x=>x)

除外された出力

  • QuestionText-オーストラリアの首都はどこですか?
  • 回答リスト

  • CorrectAnswer-キャンベラ

4

1 に答える 1

2

この行を変更してみてください:

CorrectAnswer=docs.Elements("answer").Where(x=>x.Attribute("correct").Value=="yes").Select(x=>x)

することが:

CorrectAnswer=docs.Elements("answer")
   .First(x=> x.HasAttributes && x.Attribute("correct").Value=="yes")
   .Value
于 2012-06-18T19:49:45.327 に答える