How do I set namespace attributes on an XElement

George Mauer picture George Mauer · Jun 13, 2012 · Viewed 14.9k times · Source

I need to add the following attributes to an XElement:

<xmlns="http://www.mysite.com/myresource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mysite.com/myresource TheResource.xsd">

Adding them as an XAttribute doesn't work because of the ":" and I'm sure is not the right way anyways. How do I add these on there?

Answer

George Mauer picture George Mauer · Jun 14, 2012

It took scouring a lot of blogs but I finally came up with what I think is the "right" way to do this:

        XNamespace ns = @"http://www.myapp.com/resource";
        XNamespace xsi = @"http://www.w3.org/2001/XMLSchema-instance";

        var root = new XElement(ns + "root", 
            new XAttribute(XNamespace.Xmlns+"xsi", xsi.NamespaceName),
            new XAttribute(xsi + "schemaLocation", @"http://www.myapp/resource TheResource.xsd")
            );