gpt4 book ai didi

c# - 如何从 XDocument 中删除 xmlns 属性?

转载 作者:太空狗 更新时间:2023-10-29 17:42:26 26 4
gpt4 key购买 nike

在我的 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? ,我能够删除所有属性 except xmlns

XDocument 中删除“xmlns”属性的最佳方法是什么?

最佳答案

namespace 信息似乎保存在表示 LINQ to XML 中的 XML 文档的对象树中的两个位置:作为实际的 xmlns 属性和元素的 Names。如果你从两个地方删除它,它就消失了:

doc.Descendants()
.Attributes()
.Where( x => x.IsNamespaceDeclaration )
.Remove();

foreach (var elem in doc.Descendants())
elem.Name = elem.Name.LocalName;

(上面代码的第一部分是从 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));
}

关于c# - 如何从 XDocument 中删除 xmlns 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7003983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com