我有一个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.
为什么我会收到错误?如何修复代码?
谢谢.
改变这个:
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 的串联。
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |