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 からは削除されません。この属性の特別な意味のためだと思います。
問題は、.NET XML API を使用して xmlns 属性を削除する方法です。明らかに、これの文字列表現から属性を削除することはできますが、API を使用して同じことを行うことができるかどうか疑問に思います。
@Edit: .NET 2.0 について話しています。