Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I set namespace attributes on an XElement

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?

like image 256
George Mauer Avatar asked Jun 13 '12 19:06

George Mauer


People also ask

How to change namespace in XML c#?

You can control namespace prefixes when serializing an XML tree in C# and Visual Basic. To do this, insert attributes that declare namespaces.

How do I add a namespace to an XML file?

XML Namespaces - The xmlns Attribute When using prefixes in XML, a namespace for the prefix must be defined. The namespace can be defined by an xmlns attribute in the start tag of an element. The namespace declaration has the following syntax. xmlns:prefix="URI".

How do I get XElement attribute value?

Value: If you are getting the value and the attribute might not exist, it is more convenient to use the explicit conversion operators, and assign the attribute to a nullable type such as string or Nullable<T> of Int32 . If the attribute does not exist, then the nullable type is set to null.

What is XElement C#?

The XElement class is one of the fundamental classes in LINQ to XML. It represents an XML element. The following list shows what you can use this class for: Create elements. Change the content of the element.


2 Answers

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")
);
like image 109
George Mauer Avatar answered Sep 27 '22 14:09

George Mauer


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>
like image 34
Peter Monks Avatar answered Sep 28 '22 14:09

Peter Monks