在XmlNodeList上使用LINQ

时间:2015-12-01 11:50:08

标签: c# .net xml

<X version="1.0">
  <Y id="abc" abv="a"/>
  <Y id="edf" abv="e"/>
</X>

我想选择id为&#34; abc&#34;的节点,并返回其abv&#34; a&#34;。

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);

但它确实有效,节点[&#34; id&#34;] .InnerText总是&#34;&#34;。你能指出问题出在哪里吗?

非常感谢

3 个答案:

答案 0 :(得分:15)

除了因为不是唯一的node变量而导致你的代码片段无法编译的事实(首先在linq查询aтd第二个“where”方法lambda中),你也错过了{{1}在您的查询中。

应该是

Attributes

答案 1 :(得分:6)

节点的InnerText<node></node>之间显示的文字。因此,例如<Y attributes />没有内部文本。

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

答案 2 :(得分:0)

只需将XmlNodeList强制转换为List,就像这样:

            List<XmlNode> list = new List<XmlNode>();

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