我正在尝试在一个查询中选择多个节点。
我的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>
我目前正在通过XDocument.Load加载XML文档,我正在通过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();
显然上面的内容不起作用,但我想知道是否有相同的允许我做同样的事情。
答案 0 :(得分:2)
您可以尝试_xmlFile.Descendants("View").Elements().Attributes("DefinitionId").Select(a => a.Value).ToList()
。这假设您正在查找所有DefinitionId
元素的所有子元素的View
属性。或者你需要像Descendants().Where(d => d.Name.LocalName.StartsWith("Node")).Attributes("DefinitionId").Select(a => a.Value).ToList()
这样的东西。
答案 1 :(得分:1)
您可以尝试以下方法:
IList<string> nodeIds = _xmlFile
.Descendants().Where( d => d.Name.LocalName.StartsWith("Node") )
.Select(n => n.Attribute("DefinitionId").Value).ToList();