Gil*_*lla 9 c# linq-to-xml xml-namespaces
在我的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>
Run Code Online (Sandbox Code Playgroud)
使用Linq-to-XML或其他方式,我想删除xmlns元素B包含的所有元素.
使用此处给出的方法:如何删除XMLDocument中的特定属性?,我能够删除所有属性,除了 xmlns
从中删除'xmlns'属性的最佳方法是什么XDocument?
svi*_*ick 14
似乎命名空间信息保存在对象树中的两个位置,表示LINQ to XML中的XML文档:作为实际xmlns属性和元素内部Name.如果你从两个地方删除它已经消失了:
doc.Descendants()
.Attributes()
.Where( x => x.IsNamespaceDeclaration )
.Remove();
foreach (var elem in doc.Descendants())
elem.Name = elem.Name.LocalName;
Run Code Online (Sandbox Code Playgroud)
(上面代码的第一部分是从Bertrand Marron现在删除的答案中复制的.)
如果你想从属性中删除名称空间,那就更复杂了,因为它们Name是只读的:
foreach (var attr in doc.Descendants().Attributes())
{
var elem = attr.Parent;
attr.Remove();
elem.Add(new XAttribute(attr.Name.LocalName, attr.Value));
}
Run Code Online (Sandbox Code Playgroud)