Методы 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.