26

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?

Jean-Rémy Revy
  • 5,607
  • 3
  • 39
  • 65
George Mauer
  • 117,483
  • 131
  • 382
  • 612

2 Answers2

29

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")
);
Dan Atkinson
  • 11,391
  • 14
  • 81
  • 114
George Mauer
  • 117,483
  • 131
  • 382
  • 612
11

I think what you want is described here: How to: Create a Document with Namespaces (C#) (LINQ to XML)

To take an example from it:

// Create an XML tree in a namespace.
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
    new XElement(aw + "Child", "child content")
);
Console.WriteLine(root);

would produce:

<Root xmlns="http://www.adventure-works.com">
  <Child>child content</Child>
</Root>
Peter Monks
  • 4,219
  • 2
  • 22
  • 38