在XmlNodeList上使用LINQ

ZHE*_*HAO 20 .net c# xml linq

<X version="1.0">
  <Y id="abc" abv="a"/>
  <Y id="edf" abv="e"/>
</X>
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)

但它不起作用,node ["id"].InnerText总是"".你能指出问题出在哪里吗?

非常感谢

And*_*yev 24

除了因为非唯一node变量而不能编译你的代码片段的事实(首先在linq查询aтd第二个"where"方法lambda中),你也错过Attributes了你的查询.

应该是这样的

var node = list.Cast<XmlNode>()
               .Where(n => n.Attributes["id"].InnerText == "abc")
               .Select(x => x.Attributes["abv"].InnerText);
Run Code Online (Sandbox Code Playgroud)


Dav*_*rno 7

InnerText一个节点是之间的文本<node></node>.因此,例如<Y attributes />,没有内部文本.

你需要使用 node => node.Attributes["id"].Value == "abc"