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

Gil*_*lla 2 c# linq xmldocument linq-to-xml 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 </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>  
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*eet 7

使用LINQ to 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

RemoveAttributes(doc, "mlns");
RemoveAttributes(doc, "yz");
Run Code Online (Sandbox Code Playgroud)

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

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

}
Run Code Online (Sandbox Code Playgroud)

所以你甚至可以在没有方法的情况下完成它:

doc.Descendants().Attributes("mlns").Remove();
doc.Descendants().Attributes("yz").Remove();
Run Code Online (Sandbox Code Playgroud)

  • 这适用于除-xmlns以外的所有属性,在这种情况下,它仍然不会被删除。我将把它作为一个单独的问题发布。 (2认同)