using System.Xml.Serialization;
public static class Extensions {
public static XElement StripNs(this XElement rootElement)
foreach (var element in rootElement.DescendantsAndSelf())
if (element.Name.Namespace != XNamespace.None)
element.Name = XNamespace.None.GetName(element.Name.LocalName);
bool hasDefinedNamespaces = element.Attributes().Any(attribute => attribute.IsNamespaceDeclaration ||
(attribute.Name.Namespace != XNamespace.None && attribute.Name.Namespace != XNamespace.Xml));
if (hasDefinedNamespaces)
var attributes = element.Attributes()
.Where(attribute => !attribute.IsNamespaceDeclaration)
(attribute.Name.Namespace != XNamespace.None && attribute.Name.Namespace != XNamespace.Xml) ?
new XAttribute(XNamespace.None.GetName(attribute.Name.LocalName), attribute.Value) :
element.ReplaceAttributes(attributes);
public static void Main()
string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<FluxPivotAVE xmlns=""http://transactions.grtgaz.com/pub/avisequilibrage"">
<Header xmlns=""http://transactions.grtgaz.com/pub/avisequilibragecookie"">
var rootElement = XElement.Parse(xml).StripNs();
Console.WriteLine("Root Default namespace: {0}",rootElement.GetDefaultNamespace());
XElement header = rootElement.Element("Header");
Console.WriteLine(header != null ? "Ok" : "Ko");
Console.WriteLine("Header Default namespace: {0}",header.GetDefaultNamespace());