C# 在XmlNodeList上使用LINQ

C# 在XmlNodeList上使用LINQ,c#,.net,xml,linq,C#,.net,Xml,Linq,我想选择id为“abc”的节点,并返回其abv“a” XmlDocument doc=新的XmlDocument(); 文档加载(文件路径); XmlNodeList=doc.SelectNodes(“X/Y”); var node=list.Cast()。其中(node=>node[“id”]。InnerText==“abc”) .选择(x=>x[“abv”].InnerText); 但它不起作用,节点[“id”]。InnerText始终为“”。你能指出哪里有问题吗 非常感谢除了由于非唯一的

我想选择id为“abc”的节点,并返回其abv“a”

XmlDocument doc=新的XmlDocument();
文档加载(文件路径);
XmlNodeList=doc.SelectNodes(“X/Y”);
var node=list.Cast()。其中(node=>node[“id”]。InnerText==“abc”)
.选择(x=>x[“abv”].InnerText);
但它不起作用,节点[“id”]。InnerText始终为“”。你能指出哪里有问题吗


非常感谢

除了由于非唯一的
节点
变量(第一个在linq查询之外,第二个在“where”方法lambda中)而导致代码段无法编译之外,您还遗漏了查询中的
属性

应该是这样的

XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlNodeList list = doc.SelectNodes("X/Y");
var node = list.Cast<XmlNode>().Where(node => node["id"].InnerText == "abc")
                               .Select(x=>x["abv"].InnerText);
var node=list.Cast()
.Where(n=>n.Attributes[“id”]。InnerText==“abc”)
.Select(x=>x.Attributes[“abv”].InnerText);

节点的
内部文本是出现在
之间的文本。因此,例如,
没有内部文本


您需要使用
node=>node.Attributes[“id”]。Value==“abc”

只需将XmlNodeList强制转换为List,如下所示:

var node = list.Cast<XmlNode>()
               .Where(n => n.Attributes["id"].InnerText == "abc")
               .Select(x => x.Attributes["abv"].InnerText);
List List=新列表();
foreach(xmlNodeList中的XmlNode a)
{
列表.添加(a);
}
list.OrderBy((element)=>element.ChildNodes[0].InnerText);

嗯,您的xml节点没有内部文本<代码>这是内部文本
。我忘记了确切的属性,但它很可能类似于
node.Attributes[“id”].Value==“abc”
Select(x=>x.Attributes[“abv”].Value)
var node = list.Cast<XmlNode>()
               .Where(n => n.Attributes["id"].InnerText == "abc")
               .Select(x => x.Attributes["abv"].InnerText);
            List<XmlNode> list = new List<XmlNode>();

            foreach(XmlNode a in xmlNodeList)
            {
                list.Add(a);
            }
            list.OrderBy((element) => element.ChildNodes[0].InnerText);