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

3
在我的C#代码库中,我有一个形式为XMLDocument的XML文档:
<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属性。有什么最好的方法来实现它?
2个回答

9

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

然后:

RemoveAttributes(doc, "mlns");
RemoveAttributes(doc, "yz");

编辑:我刚刚注意到,实际上可以更容易地使用Remove扩展方法:

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

}

所以你甚至可以非常简单地不使用该方法实现:
doc.Descendants().Attributes("mlns").Remove();
doc.Descendants().Attributes("yz").Remove();

2
这适用于除 xmlns 之外的所有属性,但在这种情况下仍然无法删除。我将把它作为一个单独的问题发布。 - GilliVilla
@GilliVilla:是的,xmlns 在某些方面有些特殊,尽管我仍然希望它能够正常工作... 我明天会看一下你的新问题 :) - Jon Skeet

1

如果你只有这两个属性,

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接