我有这个XML文件,我解析到它的元素并创建一个自定义对象模块的列表。XML linq查询列出第一个元素,但不是全部
XDocument kobra = XDocument.Load(new StringReader(results.OuterXml));
XNamespace ns = "#RowsetSchema";
var kobraNodeList = from s in kobra.Descendants(ns + "row")
select new Module
{
id = s.Attribute("ows_ID").Value,
name = s.Attribute("ows_Title").Value,
sourceFile = s.Attribute("ows_Source_x0020_Message_x0020_File_").Value,
scope = Scope.KOBRA,
component = string.Empty
};
,这里是我的模块结构:
public struct Module
{
public string name;
public Scope scope;
public string component;
public int wordCound;
public string id;
public string sourceFile;
}
的代码工作正常,但事情变得奇怪,当我尝试了var kobraNodeList转换成模块的列表,我在AddRange
得到System.NullReferenceException
行:
this.moduleList = new List<Module>;
this.moduleList.AddRange(kobraNodeList);
当试图调试,我注意到,虽然kobraNodeList.Count()
也返回System.NullReferenceException
,一个kobraNodeList.Any()
返回true
和kobraNodeList.First()
返回一个完美有效和正确的模块结构与所需的数据。
的XML文件是有效的,如果我更换与此LINQ查询:
var kobraNodeList = from s in kobra.Descendants(ns + "row")
select s;
我得到的XElement的有效列表,我可以Count()
确定。 有人可以解释我有什么问题吗?顺便说一句,我使用.NET 3.5。
Holy sh **你是对的,我100%肯定XML文件是完整的所有属性,不可能是原因。谢谢! – Antoine