Remove xmlns attribute in xml so as to get simple plain xml node

I am using the following code

    var xmlFile = fromConfiguration + @"xyz.xml";
    XDocument document = XDocument.Load(xmlFile);


    var xElement = document.Root;

    xElement.Add(new XElement("elementName", "elementText"));
    document.Save(xmlFile);
    XDocument documentN = XDocument.Load(xmlFile);
    XElement element = (from xml2 in documentN.Descendants("elementName")
                        select xml2).FirstOrDefault();

    element.RemoveAttributes();
    documentN.Save(xmlFile);

This gives me..

 <elementName xmlns="">elementText</elementName>

xmlns is added by default. Is there any way I can add without xmlns?

<elementName>elementText</elementName>

This is what I need to parse in my xsl file.

ANy help ??

Jon Skeet
people
quotationmark

One of the ancestor elements must be setting a default namespace, e.g.

<foo xmlns="http://foo.bar">
  <!-- Your element name -->
</foo>

If you want:

<foo xmlns="http://foo.bar">
  <elementName>elementText</elementName>
</foo>

... then that means elementName is implicitly in a namespace of http://foo.bar, because the default is inherited. So you should use:

XNamespace ns = "http://foo.bar";
xElement.Add(new XElement(ns + "elementName", "elementText"));

If you might have different namespaces in different files, you could determine the default namespace programmatically - although it may not be the namespace of the root element, e.g.

<other:foo xmlns="http://foo.bar" xmlns:other="http://surprise">
  <!-- This is still in http://foo.bar -->
  <elementName>elementText</elementName>
</foo>

people

See more on this question at Stackoverflow