Здесь есть три проблемы:
- Вы проверяете, есть ли у элемента
RootChild2
какие-либо атрибуты - и он не - Вы проверяете только первое
Child
элемент под каждым RootChild2
элементом - Вы предполагаете, что атрибут присутствует (путем разыменования
XAttribute
)
Вот код, который all найдет целевые элементы в RootChild2
:
foreach (XElement element in doc.Descendants("RootChild2"))
{
var targets = element
.Elements("Child")
.Where(child => (string) child.Attribute("key") == "target")
.ToList();
Console.WriteLine($"Found {targets.Count} targets");
foreach (var target in targets)
{
Console.WriteLine($"Target content: {target.Value}");
}
}
Обратите внимание, что приведение XAttribute
к string
- это простой способ избежать проблем с нулевыми ссылками - потому что результат явного преобразования равен нулю, когда источник равен нулю. (Это общий шаблон в LINQ для XML.)