Как я могу перечислить пространства имен, используемые в документе XML с Linq2XML? - PullRequest
0 голосов
/ 07 марта 2012

Учитывая XElement, загруженный

var root = XElement.Load("foo.xml");

Как вы можете перечислить пространства имен, используемые в файле XML?

1 Ответ

1 голос
/ 07 марта 2012

Нет ничего, что дает вам все пространства имен, используемые напрямую, поэтому вам нужно перечислить все элементы и извлечь их пространства имен:

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();
...