Методы XmlElement.Attributes.Remove* отлично работают для произвольных атрибутов, в результате чего удаленные атрибуты удаляются из свойства XmlDocument.OuterXml. Однако атрибут Xmlns отличается. Вот пример:
XmlDocument doc = new XmlDocument();
doc.InnerXml = @"<Element1 attr1=""value1"" xmlns=""http://mynamespace.com/"" attr2=""value2""/>";
doc.DocumentElement.Attributes.RemoveNamedItem("attr2");
Console.WriteLine("xmlns attr before removal={0}", doc.DocumentElement.Attributes["xmlns"]);
doc.DocumentElement.Attributes.RemoveNamedItem("xmlns");
Console.WriteLine("xmlns attr after removal={0}", doc.DocumentElement.Attributes["xmlns"]);
В результате получается
xmlns attr before removal=System.Xml.XmlAttribute
xmlns attr after removal=
<Element1 attr1="value1" xmlns="http://mynamespace.com/" />
Похоже, что атрибут удален из коллекции Attributes, но не удален из XmlDocument.OuterXml. Я предполагаю, что это из-за особого значения этого атрибута.
Вопрос в том, как удалить атрибут xmlns с помощью .NET XML API. Очевидно, я могу просто удалить атрибут из строкового представления этого, но мне интересно, можно ли сделать то же самое с помощью API.
@Edit: я говорю о .NET 2.0.