【发布时间】:2015-04-17 21:46:53
【问题描述】:
我有这种格式的 xml。我正在尝试根据一些选择性子句将此数据加载到类中
<Data
<CST>
<CA Type="type" Idea="Idea">
<Var Name="Test" Value="some value" />
</CA>
<CA Type="type2" Idea="Idea2">
<Var Name="Test2" Value="some value" />
</CA>
<CA Type="type3" Idea="Idea3">
<Var Name="Test" Value="some value" />
</CA>
</CST>
</Data>
我在 linq 中读取 xml 的代码是这样的。
IEnumerable<CA> casValues = (from s in doc.Root.Element("CST").Elements("CA")
select new CA
{
Type = s.Attribute("Type").Value,
Idea = s.Attribute("Idea").Value,
Variable = (from k in s.Elements("Var")
select new Variable
{
Name = k.Attribute("Name").Value,
Value = k.Attribute("Value").Value
}).FirstOrDefault()
});
这将返回正确加载的所有 CA 及其 var 值。但是,当我尝试进一步过滤它时,因为我只对 var name="test" 的值感兴趣,所以我得到一个带有错误的空集合
"{"Object reference not set to an instance of an object."}"
我正在使用这样的简单过滤。
IEnumerable<CA> tt = casValues.Where(x => x.Variable.Name == "Test");
我假设这是因为变量是一个类,我不能直接使用该值。当我使用 foreach 检查我的条件加载每个元素时,同样有效。上面的代码我缺少什么?
感谢收看。
【问题讨论】:
-
发布的 XML 示例不会引发该异常。请发布演示问题的最小 XML 示例,以便我们确定真正需要修复的内容...
标签: c# linq-to-xml