【发布时间】:2018-07-06 09:14:33
【问题描述】:
我有一个带有如下子元素的 XML 元素:
<Groups>
<Group1 name="first" value="1" />
<Group2 value="2" name="second" />
<Group3 value="3" />
</Groups>
我正在使用一个已经存在的方法MyMethod() 来获取Groups 元素,该元素返回一个XmlNodeList 对象,我将其转换为XmlNode。之后,我想使用 Linq 语句仅获取那些具有 name 属性的组,并将这些名称存储在字符串列表中。
在下面的代码 sn-p 中,我试图检查 XML 节点的第一个属性名称是否等于 "name",但 "name" 属性可能并不总是第一个。您能否在这里帮助我并告诉我如何在下面的Attributes 属性上使用另一个 Linq 语句? Attributes 属性的类型为 XmlAttributeCollection。
List<string> result = MyMethod().Cast<XmlNode>()
.Where(node => node.Attributes[0].Name == "name")
.Select(node => node.Attributes[0].Value).ToList();
编辑:
我设法使用内置方法GetNamedItem找到了解决方案:
List<string> result = MyMethod().Cast<XmlNode>()
.Where(node => node.Attributes?.GetNamedItem("name") != null)
.Select(node => node.Attributes?.GetNamedItem("name").Value).ToList();
【问题讨论】:
-
你可以试试这样的: var groups = groups.Where(c => c.Elements().Count(b => b.Attribute("name") != null) > 0 );仅缺少字符串值列表中的条件。你能给我一个字符串值列表的例子吗?
标签: c# xml linq xmlnode xmlattributecollection