You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL生成XML时内部节点多余xmlns=""属性如何去除?

问题:SQL生成XML时去除节点的空命名空间属性

我正在编写生成XML的SQL代码,原代码如下:

DECLARE @inner xml = '<inner>test</inner>';

WITH XMLNAMESPACES (
    DEFAULT 'urn:www.agxml.org:schemas:all:4:0',
    'http://www.w3.org/2001/XMLSchema-instance' AS xsi,
    'http://www.w3.org/2001/XMLSchema' AS xsd
)
SELECT
    @inner 
    FOR XML PATH('root'), TYPE

执行后生成的XML(已格式化换行)如下:

<root
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="urn:www.agxml.org:schemas:all:4:0"
>
  <inner xmlns="">test</inner>
</root>

可以看到节点带有多余的xmlns=""属性,尝试去除未成功,请问能否仅在根节点上添加xmlns命名空间?


解决方案

问题根源在于:@inner变量中的<inner>节点属于无命名空间,而根节点通过WITH XMLNAMESPACES指定了默认命名空间urn:www.agxml.org:schemas:all:4:0。SQL Server为了严格保持节点的命名空间归属,会给无命名空间的<inner>节点添加xmlns=""声明,明确它不属于根节点的默认命名空间。

要实现仅根节点带命名空间声明、<inner>节点继承默认命名空间的效果,有两种可行方法:

方法1:直接给@inner中的节点指定对应命名空间

修改@inner的定义,在<inner>节点上直接声明目标命名空间:

DECLARE @inner xml = '<inner xmlns="urn:www.agxml.org:schemas:all:4:0">test</inner>';

WITH XMLNAMESPACES (
    DEFAULT 'urn:www.agxml.org:schemas:all:4:0',
    'http://www.w3.org/2001/XMLSchema-instance' AS xsi,
    'http://www.w3.org/2001/XMLSchema' AS xsd
)
SELECT
    @inner 
    FOR XML PATH('root'), TYPE

方法2:用XML查询迁移节点到目标命名空间

如果@inner是动态生成的,无法预先指定命名空间,可以用XML的query()方法将节点迁移到目标命名空间:

DECLARE @inner xml = '<inner>test</inner>';

-- 将@inner中的节点迁移到目标默认命名空间
SET @inner = @inner.query('
    declare default element namespace "urn:www.agxml.org:schemas:all:4:0";
    /inner
');

WITH XMLNAMESPACES (
    DEFAULT 'urn:www.agxml.org:schemas:all:4:0',
    'http://www.w3.org/2001/XMLSchema-instance' AS xsi,
    'http://www.w3.org/2001/XMLSchema' AS xsd
)
SELECT
    @inner 
    FOR XML PATH('root'), TYPE

执行结果

修改后生成的XML将只有根节点带有命名空间声明,<inner>节点继承默认命名空间,不再出现xmlns="":

<root
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="urn:www.agxml.org:schemas:all:4:0"
>
  <inner>test</inner>
</root>

内容的提问来源于stack exchange,提问作者Chunhui Ma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 12:33:19