Los métodos XmlElement.Attributes.Remove * funcionan bien para los atributos arbitrarios que tienen como resultado que los atributos eliminados se eliminen de la propiedad XmlDocument.OuterXml. Sin embargo, el atributo Xmlns es diferente. Este es un ejemplo:Cómo eliminar el atributo xmlns con .NET XML API
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"]);
La salida resultante es
xmlns attr before removal=System.Xml.XmlAttribute
xmlns attr after removal=
<Element1 attr1="value1" xmlns="http://mynamespace.com/" />
El atributo parece ser retirado de la colección de atributos, pero no se elimina de XmlDocument.OuterXml. Supongo que es por el significado especial de este atributo.
La pregunta es cómo eliminar el atributo xmlns utilizando .NET XML API. Obviamente, puedo eliminar el atributo de una representación de Cadena de esto, pero me pregunto si es posible hacer lo mismo con la API.
@Edit: estoy hablando de .NET 2.0.
Acabo de tropezar con este problema. ¡Buen descubrimiento! –