c# – 如何从XDocument中删除xmlns属性?
发布时间:2020-12-15 03:55:49 所属栏目:百科 来源:网络整理
导读:在我的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
在我的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)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |