如何更改命名空间的前缀?

Posted

技术标签:

【中文标题】如何更改命名空间的前缀?【英文标题】:How to change prefix of a namespace? 【发布时间】:2021-01-25 06:08:54 【问题描述】:

如何转换它

<d xmlns='uri' xmlns:a='uri'>
    <a:c/>
    <c a:atr=':a:b:c:d:e:f:'/>
</d>

进入这个

<d xmlns='uri' xmlns:b='uri'>
    <b:c/>
    <c b:atr=':a:b:c:d:e:f:'/>
</d>

?

有可能吗?最好是System.Xml.XmlDocument

如果 .Net 无法实现,您知道用什么可以实现吗?

【问题讨论】:

可能重复:xml-serialization-and-namespace-prefixes 【参考方案1】:

我对这个 API 有点生疏了,但你应该可以使用 XDocument 来替换命名空间:

var document = XDocument.Load(@"E:\input.xml");

// Find and remove the namespace
document.Root.Attribute(XNamespace.Xmlns + "a").Remove();

// Add a new namespace with same uri and different prefix
document.Root.Add(new XAttribute(XNamespace.Xmlns + "b", "uri"));

document.Save(@"E:\output.xml");

保存时,XDocument 会重新生成 XML,并且只要您保持相同的 uri,就应该应用新前缀。

【讨论】:

System.Xml.XmlDocument 有可能吗? 因为如果xmlnsxmlns:a相同,那么每个没有前缀的节点都会以b为前缀(如果a改为b)。

以上是关于如何更改命名空间的前缀?的主要内容,如果未能解决你的问题,请参考以下文章

重命名元素的 XSLT 问题——更改命名空间

webservices 更改 ASMX Web 服务返回的命名空间前缀

使用 Microsoft.xmldom 更改 XML 元素的命名空间前缀,以便利用 GetElementsByTagName

JAXB 编组:更改应声明命名空间的元素

将命名空间前缀添加到根节点

如何更改Spring-WS的“SOAP-ENV”默认前缀