无法使用linq从xml读入<>,获取空值

Eug*_*ene 5 c# linq-to-xml

我有一个XML文件:

<?xml version="1.0" encoding="us-ascii"?>
<TestItems xmlns="http://www.blogger.com">
  <TestItem correct="0" incorrect="0">
    <Question>question</Question>
    <Answer>answer</Answer>
    <Tags>test1;test2</Tags>
  </TestItem>
  <TestItem correct="0" incorrect="0">
    <Question>question3</Question>
    <Answer>answer3</Answer>
    <Tags>tagA;tagB;tagC</Tags>
  </TestItem>
</TestItems>
Run Code Online (Sandbox Code Playgroud)

我也有一个对象:

class TestItem
{
    public string Question { get; set; }
    public string Answer { get; set; }
    public int NumberCorrect { get; set; }
    public int NumberIncorrect { get; set; }
    public string Tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我用来将数据读入内存的代码:

XDocument ktdb = XDocument.Load("KTdb.xml");

XNamespace ns = ktdb.Root.Name.Namespace;

var testItems = from item in ktdb.Descendants(ns + "TestItem")
    select new TestItem
    {
        Question = item.Element(ns + "Question").Value,
        Answer = (string)item.Element(ns + "Answer").Value,
        Tags = item.Element(ns + "Tags").Value,
        NumberCorrect = Convert.ToInt32(item.Attribute(ns + "correct").Value),
        NumberIncorrect = Convert.ToInt32(item.Attribute(ns + "incorrect").Value)
    };
Run Code Online (Sandbox Code Playgroud)

但它不会让我这样做.执行LINQ语句时,在TestItem对象上调用默认构造函数,然后我得到null异常,因为它 item.Element(ns + "Question").Value为null.

为什么我会收到错误?如何修复代码?

谢谢.

Rob*_*Rob 3

改变这个:

NumberCorrect = Convert.ToInt32(item.Attribute(ns + "correct").Value),
NumberIncorrect = Convert.ToInt32(item.Attribute(ns + "incorrect").Value)
Run Code Online (Sandbox Code Playgroud)

对此:

NumberCorrect = Convert.ToInt32(item.Attribute("correct").Value),
NumberIncorrect = Convert.ToInt32(item.Attribute("incorrect").Value)
Run Code Online (Sandbox Code Playgroud)

即从属性名称中删除 ns 的串联。