<X version="1.0">
<Y id="abc" abv="a"/>
<Y id="edf" abv="e"/>
</X>
我想选择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);
但是它不起作用,node[“id”]。InnerText总是“"。你能指出问题出在哪里吗?
非常感谢
4条答案
按热度按时间lx0bsm1f1#
除了由于非唯一的
node
变量(第一个在linq查询之外,第二个在“where”方法lambda中)而无法编译代码片段之外,您还在查询中遗漏了Attributes
。应该是这样的
zphenhs42#
节点的
InnerText
是出现在<node>
和</node>
之间的文本。因此,对于例如<Y attributes />
,没有内部文本。您需要使用
node => node.Attributes["id"].Value == "abc"
tquggr8v3#
只需将XmlNodeList强制转换为List,如下所示:
chhkpiq44#
也许使用
OfType<XmlElement>
而不是Cast<XmlNode>
更好