在我的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或其他方式,我想删除元素mlns
包含的所有元素的yz
和B
属性。
实现它的最佳方法是什么?
答案 0 :(得分:6)
使用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();
答案 1 :(得分:1)
如果您只有这两个属性,
doc.Element("A").Elements("B").Attributes().Remove();