Вы также можете использовать:
var element = doc.Elements()
.Elements()
.Where(e => (e.Elements().Any()
&& e.Attribute("name").Value == "somekey"))
.First();
Объяснение:
doc.Elements()
захватывает корневой элемент, который является nodes
. Затем .Elements()
выбирает дочерние элементы того, что является только одним, node
. Затем .Where()
выполняется на этом наборе узлов, что вам и нужно. Лямбда выбирает те элементы, которые имеют дочерние элементы, а также имеют атрибут «name» со значением «somekey».
В вашем исходном коде не было элементов Child-of-Child. Следовательно, исходный набор результатов был пуст.
Вы также можете сделать это с .Descendants()
, но мне это кажется немного неаккуратным и свободным.