Если вам не нужны родительские узлы, вы можете использовать селектор Descendants для упрощения кода:
XNamespace ns = "urn:schemas-microsoft-com:PAG:updater-application-block:v2:manifest";
var files = XDocument.Parse(xml).Descendants(ns + "file").Select(x => new {
Source = (string)x.Attribute("source"),
Hash = (string)x.Attribute("hash")
});
Файлы
теперь будут хранить IEnumerable строго типизированных (анонимных) объектов, которые предоставляют свойства «Source» и «Hash»