可以';t循环C#中返回的XML节点的子级

本文关键字:返回 XML 节点 循环 可以 | 更新日期: 2023-09-27 18:24:18

我有一个大而混乱的XML文件,我想从中检索所有同名的元素(为了本文的目的,是"Item"),然后能够从每个元素的子元素中检索数据。

到目前为止,我已经使用这段代码返回了一个名为"Item"的每个元素的列表,它只是在p标签中显示名称空间url和"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"的定义

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

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

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

我希望能够在每个"Item"元素中搜索一个"Name"元素并返回值。有人看到我哪里错了吗?

可以';t循环C#中返回的XML节点的子级

这就是问题所在:

.Select(d => d.Name)

您显式地选择了元素的名称。如果你想要实际的元素(我认为你确实想要),就去掉这个调用:

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

您也可以去掉ToList(),除非需要急切地实现查询。