2016-11-09 152 views
1

如何从XElement中删除“xmlns”命名空间?C# - 如何从XElement中删除xmlns

我试过:attributes.remove,xElement.Name.NameSpace.Remove(0)等等,没有成功。

我的XML:

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

我怎样才能做到这一点?

+3

你可以”很容易做到这一点;这意味着重写每个名称都没有命名空间。你想解决什么问题?您应该始终使用名称空间。 – SLaks

+0

你是如何开始使用XML的?您的代码是否在创建它,还是您从其他地方读取的XML?更多信息在这里会非常有帮助。 –

+0

SLaks,问题是我的模式未验证某些节点中是否存在名称空间。 – Eduardo

回答

2

你可以使用IsNamespaceDeclaration检测其属性是一个命名空间

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

thanks @octavioccl。我会尝试。 – Eduardo

+0

它没有工作的人! xmlns不被识别是一个命名空间。 “ – Eduardo

+0

”as“命名空间 – Eduardo

0

接受的答案并没有为我工作,因为xelement.Attributes()是空的,它没有返回命名空间的属性。

下面将删除你的情况的声明:

element.Name = element.Name.LocalName;

如果你想为你的元素和所有子元素做递归使用以下命令:

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); 
      } 
     } 
    }