Нет ничего, что дает вам все пространства имен, используемые напрямую, поэтому вам нужно перечислить все элементы и извлечь их пространства имен:
var namespaces = root.DescendantsAndSelf()
.Select(e => e.Name.Namespace)
.Distinct();
Это даст вам только те пространства имен, которые использовались элементами в документе. Если вы хотите перечислить все пространства имен, которые объявлены в документе (даже если они не используются или используются только атрибутами), вам нужно будет повторить объявления пространства имен:
var namespaces = root.DescendantsAndSelf()
.Attributes()
.Where(a => a.IsNamespaceDeclaration)
.Select(a => (XNamespace)a.Value)
.Distinct();