Как установить атрибуты пространства имен в XElement

Мне нужно добавить следующие атрибуты в 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">

Добавление их как XAttribute не работает из-за ":", и я уверен, что это не так. Как добавить их там?

Ответ 1

Потребовалось много блогов, но я, наконец, придумал, что я думаю, это "правильный" способ сделать это:

        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")
            );

Ответ 2

Я думаю, что то, что вы хотите, описано здесь: Как создать документ с пространствами имен (С#) (LINQ to XML)

Чтобы взять из него пример:

// 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);

создаст:

<Root xmlns="http://www.adventure-works.com">
  <Child>child content</Child>
</Root>