我是新手,并尝试根据以下xml检索文件节点的所有值。
<Changes>
<Change id="Rest">
<Name>Restructure</Name>
<TIDE>
<Files>
<File>REGION</File>
</Files>
</TIDE>
<Click>
<Files>
<File>DISTRICT</File>
</Files>
</Click>
</Change>
<Change id="st">
<Name>New ST</Name>
<TIDE>
<Files>
<File>REGION</File>
</Files>
</TIDE>
<Click>
<Files>
<File>DISTRICT</File>
</Files>
</Click>
</Change>
</Changes>
我正在使用的代码给我一个错误&#34;序列不包含任何元素&#34;。我试图通过在这个论坛上搜索几个例子来构建这个代码。有人可以帮助我,非常感谢。
var items = (from i in xmldoc.Root.Elements("Change")
where (string)i.Element("Name").Value == listBox1.SelectedValue.ToString()
select i).First().Elements("File").ToList();
答案 0 :(得分:1)
此LINQ查询返回Change
个节点:
(from i in xmldoc.Root.Elements("Change")
where (string)i.Element("Name").Value == listBox1.SelectedValue.ToString()
select i)
...而Change
个节点没有直接子节点File
。在这种情况下,您可以使用Descendants()
代替Elements()
。
var items = (from i in xmldoc.Root.Descendants("Change")
where i.Element("Name").Value == listBox1.SelectedValue.ToString()
select i).First().Descendants("File").ToList();
答案 1 :(得分:1)
您将收到此错误:
“序列不包含任何元素”
通过First()方法调用抛出。 First()预计至少会列出一个结果,并且Where子句中的过滤器会删除所有结果(可能没有从列表框中正确获取名称)。
我在我的机器上测试过,将listBox1.SelectedValue.ToString()替换为“Restructure”,错误不再发生。
即使未抛出异常,结果也不如预期,项目列表为空。要解决这个问题,你必须遵循har07响应,一切都会正常工作。