C# 如何删除XMLDocument中的特定属性?

C# 如何删除XMLDocument中的特定属性?,c#,linq,linq-to-xml,xmldocument,xattribute,C#,Linq,Linq To Xml,Xmldocument,Xattribute,在我的C#代码库中,我有一个XMLDocument格式: <A> <B> <C mlns='blabla' yz='blablaaa'> Hi </C> <D mlns='blabla' yz='blablaaa'> How </D> <E mlns='blabla' yz='blablaaa'> Are </E> <F mlns='blabla' yz='blablaaa'> You &

在我的C#代码库中,我有一个
XMLDocument
格式:

<A>
<B>
<C mlns='blabla' yz='blablaaa'> Hi </C>
<D mlns='blabla' yz='blablaaa'> How </D>
<E mlns='blabla' yz='blablaaa'> Are </E>
<F mlns='blabla' yz='blablaaa'> You </F>
</B>
<B>
<C mlns='blabla' yz='blablaaa'> I </C>
<D mlns='blabla' yz='blablaaa'> am</D>
<E mlns='blabla' yz='blablaaa'> fine</E>
<F mlns='blabla' yz='blablaaa'> thanks</F>
</B>
</A>  

你好
怎么
是
你
我
是
好的
谢谢
使用Linq to XML或其他方式,我想删除元素
B
包含的所有元素的
mlns
yz
属性

实现它的最佳方法是什么?

使用LINQ到XML

public static void RemoveAttributes(XNode parent, XName attribute)
{
    // I'm not sure what would happen if we tried to remove the attribute
    // while querying... seems like a bad idea.
    var list = parent.Descendants()
                     .Attributes(attribute)
                     .ToList();

    foreach (var attribute in list)
    {
        attribute.Remove();
    }
}
然后:

编辑:我刚刚注意到,事实上,使用扩展方法应该更容易:

public static void RemoveAttributes(XNode parent, XName attribute)
{
    parent.Descendants()
          .Attributes(attribute)
          .Remove();

}
因此,您甚至可以不使用该方法而简单地执行此操作:

doc.Descendants().Attributes("mlns").Remove();
doc.Descendants().Attributes("yz").Remove();

如果只有这两个属性

 doc.Element("A").Elements("B").Attributes().Remove();

这适用于除-xmlns之外的所有属性,在这种情况下,它仍然不会被删除。我将把它作为一个单独的问题来回答。@GilliVilla:是的,
xmlns
在某些方面有点特别,尽管我仍然希望它能起作用。。。明天我来看看你的新问题:)
 doc.Element("A").Elements("B").Attributes().Remove();