C# 在XmlNodeList上使用LINQ
我想选择id为“abc”的节点,并返回其abv“a”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始终为“”。你能指出哪里有问题吗 非常感谢除了由于非唯一的
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);