Кажется, что информация о пространстве имен хранится в двух местах в дереве объектов, представляющих XML-документ в LINQ to XML: как фактические атрибуты xmlns
и внутри элементов Name
s.Если вы удалите его из обоих мест, оно исчезнет:
doc.Descendants()
.Attributes()
.Where( x => x.IsNamespaceDeclaration )
.Remove();
foreach (var elem in doc.Descendants())
elem.Name = elem.Name.LocalName;
(Первая часть кода выше скопирована из удаленного ответа Бертрана Маррона.)
Если вы хотите удалить пространства имениз атрибутов, это немного сложнее, потому что их Name
только для чтения:
foreach (var attr in doc.Descendants().Attributes())
{
var elem = attr.Parent;
attr.Remove();
elem.Add(new XAttribute(attr.Name.LocalName, attr.Value));
}