C# - How to remove xmlns from XElement

≯℡__Kan透↙ 提交于 2019-11-28 07:47:37

问题


How can I remove the "xmlns" namespace from a XElement?

I tried: attributes.remove, xElement.Name.NameSpace.Remove(0), etc, etc. No success.

My xml:

<event xmlns="http://www.blablabla.com/bla" version="1.00">
  <retEvent version="1.00">
  </retEvent>
</event>

How can I accomplish this?


回答1:


The accepted answer did not work for me because xelement.Attributes() was empty, it wasn't returning the namespace as an attribute.

The following will remove the declaration in your case:

element.Name = element.Name.LocalName;

If you want to do it recursively for your element and all child elements use the following:

    private static void RemoveAllNamespaces(XElement element)
    {
        element.Name = element.Name.LocalName;

        foreach (var node in element.DescendantNodes())
        {
            var xElement = node as XElement;
            if (xElement != null)
            {
                RemoveAllNamespaces(xElement);
            }
        }
    } 



回答2:


You could use IsNamespaceDeclaration to detect which attribute is a namespace

xelement.Attributes()
        .Where( e => e.IsNamespaceDeclaration)
        .Remove();


来源:https://stackoverflow.com/questions/40517306/c-sharp-how-to-remove-xmlns-from-xelement

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!