Я пытаюсь выбрать несколько узлов в одном запросе.
Мой 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.Load, и я анализирую полученный XML через LINQ to XML.
Я в основном пытаюсь получить весь идентификатор определения всех типов узлов в одну коллекцию строк.
Мой текущий код выглядит так
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()
. Это предполагает, что вы ищете атрибуты DefinitionId
всех дочерних элементов всех элементов View
. Или вам нужно что-то вроде 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();