无法在C#中循环返回的XML节点的子节点

时间:2014-09-25 11:42:58

标签: c# xml linq razor

我有一个庞大的,凌乱的XML文件,我想从中检索同名的 ALL 元素(为了这篇文章,“Item”),然后能够从中检索数据每个元素的孩子。

到目前为止,我已经使用此代码返回了名为“Item”的每个元素的列表,该代码只显示命名空间url和p标签中的“Item”:

XDocument doc = XDocument.Load(@"C:\inetpub\wwwroot\mysite\myxml.xml");
XNamespace ns = "http://www.mynamespace.com";
var nodes = doc.Descendants().Elements(ns + "Item").Select(d => d.Name).ToList();

foreach(var x in nodes){
    <p>@x</p>
}

但是,通过修改以下代码,我无法检索它的子项的任何数据,我得到错误'System.Xml.Linq.XName'不包含'Descendants'的定义< / EM>:

foreach(var x in nodes){
    <p>@x.Descendants().Element("Name")</p>
}

这是我的XML文件的一个非常基本的版本:

<Item>
    <Name>Item 1</Name>
    <Type>Type 1</Type>
</Item>

我希望能够在每个'Item'元素中搜索'Name'元素并返回值。谁能看到我哪里出错?

1 个答案:

答案 0 :(得分:3)

这是问题所在:

.Select(d => d.Name)

您明确选择了元素的名称。如果你想要实际的元素(我认为你这样做),那就去掉那个电话:

var nodes = doc.Descendants().Elements(ns + "Item").ToList();

除非您需要要急切地实现查询,否则您也可以摆脱ToList()