繁体   English   中英

使用linq to xml获取元素的元素值

[英]Fetch value of element by attribute using linq to xml

我有跟随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堪培拉

尝试更改此行:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM