删除带有命名空间前缀的 xmlns 属性

Posted

技术标签:

【中文标题】删除带有命名空间前缀的 xmlns 属性【英文标题】:Remove xmlns attribute with namespace prefix 【发布时间】:2012-11-28 21:49:30 【问题描述】:

这个问题是this one 的逻辑延续 - 现在假设XElement 包含非默认命名空间中的元素:

<Body xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
  <ReportItems />        
  <Height />
  <rd:Style />
</Body>

我正在尝试采用与上一个问题的答案中建议的相同的方法,即删除 xmlns 属性,但是当它是 xmlns + 前缀时它不起作用,例如 xmlns:xx

TL;DR 版本

这行得通:

Dim xml = <Body xmlns="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"/>
xml.Attribute("xmlns").Remove()

这不是:

Dim xml = <Body xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"/>
xml.Attribute("xmlns:rd").Remove()

收到此错误:

XmlException was unhandled
The ':' character, hexadecimal value 0x3A, cannot be included in a name.

如何从XElement 中删除xmlns:xx 属性?

【问题讨论】:

【参考方案1】:

试试这个:

xml.Attribute(XNamespace.Get("http://www.w3.org/2000/xmlns/") + "rd").Remove()

【讨论】:

以上是关于删除带有命名空间前缀的 xmlns 属性的主要内容,如果未能解决你的问题,请参考以下文章

Open Graph 命名空间声明:带有 XMLNS 或 head 前缀的 HTML?

使用命名空间前缀更新 XML 文件

带有命名空间前缀的 TagSoup 属性

使用 XLS 删除一些命名空间前缀

XML 属性未获取命名空间前缀

android xmlns是啥意思