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

如何用SQL移除XML标签的xsi:nil="true"属性并插入文本

用SQL修改XML:移除xsi:nil属性并添加节点文本

需求说明

原XML内容:

<Header>
    <SampleTag>text</SampleTag>
    <GeographicalLimit xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
    <SampleTag> text </SampleTag>
</Header>

期望修改后:

<Header>
    <SampleTag>text</SampleTag>
    <GeographicalLimit>Sample text</GeographicalLimit>
    <SampleTag> text </SampleTag>
</Header>

SQL Server 解决方案

SQL Server的XML类型支持.modify()方法,可直接操作XML节点和属性:

-- 初始化测试XML数据(需带上xsi命名空间声明,否则无法识别xsi:nil属性)
DECLARE @XmlData XML = N'
<Header>
    <SampleTag>text</SampleTag>
    <GeographicalLimit xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
    <SampleTag> text </SampleTag>
</Header>
';

-- 移除xsi:nil属性
SET @XmlData.modify('
    declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance";
    replace value of (/Header/GeographicalLimit/@xsi:nil)[1] with ()
');

-- 往GeographicalLimit节点插入示例文本
SET @XmlData.modify('
    insert text{"Sample text"} into (/Header/GeographicalLimit)[1]
');

-- 输出修改后的XML
SELECT @XmlData AS ModifiedXml;

PostgreSQL 解决方案

PostgreSQL使用xmlmodify()函数处理XML修改:

WITH xml_source AS (
    SELECT '<Header>
    <SampleTag>text</SampleTag>
    <GeographicalLimit xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
    <SampleTag> text </SampleTag>
</Header>'::XML AS raw_xml
)
SELECT
    -- 先删除xsi:nil属性,再替换节点文本
    xmlmodify('delete /Header/GeographicalLimit/@xsi:nil',
    xmlmodify('replace value of /Header/GeographicalLimit/text() with "Sample text"', raw_xml)) AS modified_xml
FROM xml_source;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:52:49