tags:

views:

244

answers:

2

Hi, I'm trying to get rid of empty namespace tags in my xml file. All of the solutions i've seen are based creating the xml from scratch. I have various xelements constructed from a previous xml. All I'm doing is

XElement InputNodes = XElement.Parse(InputXML);
m_Command = InputNodes.Element("Command");

and it adding the xmlns = "" everywhere. This is really infuriating. Thanks for any help.

A: 

Possibly it's this: Empty namespace using Linq Xml

This would indicate your document is in a different default namespace than the elements you add.

Tomalak
that's the issue, but I can't build my xelements that way because I've already gotten half of them from another xml document
Steve
You just have to make sure that the namespaces of the document and the elements you insert match. If they don't, every element that deviates from the default will get it's own xmlns attribute, so the difference gets persisted in the XML file.
Tomalak
+2  A: 

There's a post on MSDN blogs that shows how to get around this (reasonably) easily. Before outputing the XML, you'll want to execute this code:

foreach (XElement e in root.DescendantsAndSelf())
{
    if (e.Name.Namespace == string.Empty)
    {
        e.Name = ns + e.Name.LocalName;
    }
}

The alternative, as the poster mentions, is prefixing every element name with the namespace as you add it, but this seems like a nicer solution in that it's more automated and saves a bit of typing.

Noldorin
+1 for the pragmatic solution. ;)
Tomalak