c# – 如何从XDocument中删除xmlns属性?

前端之家收集整理的这篇文章主要介绍了c# – 如何从XDocument中删除xmlns属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的C#代码库中,我有一个表单的XDocument:
<A>
 <B>
   <C xmlns='blabla' yz='blablaaa'> Hi </C>
   <D xmlns='blabla' yz='blablaaa'> How </D>
   <E xmlns='blabla' yz='blablaaa'> Are </E>
   <F xmlns='blabla' yz='blablaaa'> You </F>
 </B>
 <B>
   <C xmlns='blabla' yz='blablaaa'> I </C>
   <D xmlns='blabla' yz='blablaaa'> am</D>
   <E xmlns='blabla' yz='blablaaa'> fine</E>
    <F xmlns='blabla' yz='blablaaa'> thanks</F>
 </B>

使用Linq-to-XML或其他方式,我想删除元素B包含的所有元素的xmlns.

使用此处给出的方法How to Remove specific attributes in XMLDocument?,我能够删除除xmlns之外的所有属性

从XDocument中删除’xmlns’属性的最佳方法是什么?

解决方法

似乎命名空间信息保存在对象树中的两个位置,表示LINQ to XML中的XML文档:作为实际的xmlns属性和元素的名称内部.如果你从两个地方删除它已经消失了:
doc.Descendants()
   .Attributes()
   .Where( x => x.IsNamespaceDeclaration )
   .Remove();

foreach (var elem in doc.Descendants())
    elem.Name = elem.Name.LocalName;

(上面代码的第一部分是从Bertrand Marron现在删除的答案中复制的.)

如果你想从属性删除名称空间,那就更复杂了,因为它们的名称是只读的:

foreach (var attr in doc.Descendants().Attributes())
{
    var elem = attr.Parent;
    attr.Remove();
    elem.Add(new XAttribute(attr.Name.LocalName,attr.Value));
}

猜你在找的C#相关文章