Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating an XML element with a namespace with XmlDocument.CreateElement()

I'm trying to create an XmlDocument using C# and .NET (version 2.0.. yes, version 2.0). I have set the namespace attributes using:

document.DocumentElement.SetAttribute(
    "xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope");

When I create a new XmlElement using:

document.createElement("soapenv:Header");

...it doesn't include the soapenv namespace in the final XML. Any ideas why this happens?

More info:

Okay, I'll try to clarify this problem a bit. My code is:

XmlDocument document = new XmlDocument();
XmlElement element = document.CreateElement("foo:bar");
document.AppendChild(element); Console.WriteLine(document.OuterXml);

That outputs:

<bar />

However, what I want is:

<foo:bar />
like image 730
Frank X Avatar asked Oct 02 '22 02:10

Frank X


1 Answers

You can assign a namespace to your bar element by using XmlDocument.CreateElement Method (String, String, String)

Example:

using System;
using System.Xml;

XmlDocument document = new XmlDocument();

// "foo"                    => namespace prefix
// "bar"                    => element local name
// "http://tempuri.org/foo" => namespace URI

XmlElement element = document.CreateElement(
    "foo", "bar", "http://tempuri.org/foo");

document.AppendChild(element);
Console.WriteLine(document.OuterXml);

Expected Output #1:

<foo:bar xmlns:foo="http://tempuri.org/foo" />

For a more interesting example, insert these statements before document.AppendChild(element);:

XmlElement childElement1 = document.CreateElement("foo", "bizz",
    "http://tempuri.org/foo");

element.AppendChild(childElement1);
    
XmlElement childElement2 = document.CreateElement("foo", "buzz",
    "http://tempuri.org/foo");

element.AppendChild(childElement2);

Expected Output #2:

<foo:bar xmlns:foo="http://tempuri.org/foo"><foo:bizz /><foo:buzz /></foo:bar>

Note that the child elements bizz and buzz are prefixed with the namespace prefix foo, and that the namespace URI http://tempuri.org/foo isn't repeated on the child elements since it is defined within the parent element bar.

like image 83
DavidRR Avatar answered Oct 13 '22 10:10

DavidRR