<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;。你能指出问题出在哪里吗?
非常感谢
答案 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);