选择多个节点在同一级别w/ LINQ
本文关键字:一级 LINQ 节点 选择 | 更新日期: 2023-09-27 18:05:25
我正在尝试在一个查询中选择多个节点。
我的XML看起来像
<View Id="View#1">
<Node1 DefinitionId="DefinitionId1">
// ...
</Node1>
</View>
<View Id="View#2">
<Node2 DefinitionId="DefinitionId2">
// ...
</Node2>
</View>
<View Id="View#3">
<Node3 DefinitionId="DefinitionId3">
// ...
</Node3>
</View>
我目前有XML文档通过XDocument加载。加载后,我正在通过LINQ to XML解析生成的XML。
我基本上试图获得所有节点类型的所有定义id到一个字符串集合。
我当前的代码是这样的
IList<string> node1Ids = _xmlFile
.Descendants("Node1")
.Select(n => n.Attribute("DefinitionId").Value).ToList();
IList<string> node2Ids = _xmlFile
.Descendants("Node2")
.Select(n => n.Attribute("DefinitionId").Value).ToList();
有没有办法把所有这些放到一个查询中,比如
IList<string> nodeIds = _xmlFile
.Descendants("Node1")
.Descendants("Node2")
.Descendants("Node3")
.Select(n => n.Attribute("DefinitionId").Value).ToList();
显然上面没有工作,但我想知道是否有一个等效的允许我做同样的事情。
您可以试试_xmlFile.Descendants("View").Elements().Attributes("DefinitionId").Select(a => a.Value).ToList()
。假设您正在查找所有View
元素的所有子元素的DefinitionId
属性。或者需要Descendants().Where(d => d.Name.LocalName.StartsWith("Node")).Attributes("DefinitionId").Select(a => a.Value).ToList()
。
您可以尝试如下:
IList<string> nodeIds = _xmlFile
.Descendants().Where( d => d.Name.LocalName.StartsWith("Node") )
.Select(n => n.Attribute("DefinitionId").Value).ToList();