Adding a namespace to existing XDocument

12,224

First of all, while XML markup allows you to use

<root xmlns="http://example.com/ns">
  <foo>
    <bar>baz</bar>
  </foo>
</root>

to use a single namespace declaration attribute to put the root element as well as those descendant elements into the declared namespace, when you manipulate the tree model you need to change the Name of all elements so you need e.g.

XNamespace myNs = "http://example.com/ns";

foreach (XElement el in xdoc.Descendants()) 
{
  el.Name = myNs + el.Name.LocalName;
}

If you also want to set a certain prefix pf then addionally set

  xdoc.Root.Add(new XAttribute(XNamespace.Xmlns + "pf", myNs));
Share:
12,224
user9969
Author by

user9969

Updated on July 30, 2022

Comments

  • user9969
    user9969 over 1 year

    I need to manipulate some xml files using Linq to xml.

    I have an existing XDocument that I Load

    Now I cannot seem to be able to add a namespace to it.

    I do:

    //Load an existing xml into a XDocument
    XDocument xdoc=XDocument.Load(myXml);
    
    //Create a namespace
     XNamespace myNS="http://www.w3.org/2001/XMLSchema-instance/MyShinyNewNamespace";
     xAttribute myAttr=new XAttribute(XNamespace.Xmlns +"myNS",myNS);
    
      //Add new namepsace to root
    
     xdoc.Root ????
    
    What do you do here?
    

    How do I retrieve my namespace?

    How do I Remove/Replace?

    many thanks