linq to xml - get rid of blank xmlns

2020-04-08 11:19发布

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.

标签: c# xml linq
3条回答
贪生不怕死
2楼-- · 2020-04-08 11:35

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.

查看更多
▲ chillily
3楼-- · 2020-04-08 11:43

I think the second answer down on this post:

XElement Add function adds xmlns="" to the XElement

was very useful. Basically if you just do

XNamespace rootNamespace = doc.Root.Name.NamespaceName;
XElement referenceElement = new XElement(rootNamespace + "Reference");

That should solve it. So I guess you have to tell it not to worry about a special namespace when you are creating the element. Odd.

查看更多
\"骚年 ilove
4楼-- · 2020-04-08 11:53

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.

查看更多
登录 后发表回答