sql-server-2005 - 如何在 SQL Server 2005 中替换部分 XML 节点

标签 sql-server-2005 replace xquery-sql

我想知道如何使用 xquery 更新 SQL Server 2005 中 XML 节点的部分文本

在下面的例子中,我想用“excellent”替换“very”这个词

    declare @xml as xml
    set @xml = '<root><info>well hello this is a very good example</info></root>'
    declare @replacement as varchar(50)
    set @replacement = 'excellent'
    declare @search as varchar(50)
    set @search = 'very'

    set @xml.modify('replace value of (/root/info/text())[1]
                     with replace((/root/info/text())[1],sql:variable("@search"),sql:variable("@replacement"))'
        )
    select @xml

任何帮助,将不胜感激

最佳答案

由于您要替换的这个词不是 XML 标记的内容 - 而只是该内容的一部分 - 您可能只想查看基于文本的替换选项。

如果你有这样的东西,它会起作用:

declare @xml as xml

set @xml = '<root><info>well hello this is a <rating>very good</rating> example</info></root>'

然后,您可以访问 XML 并替换 <rating>....</rating> 的内容。用别的东西:
declare @replacement as varchar(50)
set @replacement = 'excellent'

set 
    @xml.modify('replace value of (/root/info/rating/text())[1]
                 with sql:variable("@replacement")')

select @xml

但就目前而言,您可能必须获取 <info> 的文本内容。并对其进行文本替换:
DECLARE @xml as XML
SET @xml = '<root><info>well hello this is a very good example</info></root>'

DECLARE @newcontent VARCHAR(1000)
SELECT @newcontent = @xml.value('(/root/info/text())[1]', 'VARCHAR(1000)')

-- replace "very" with "excellent"    
SELECT @newcontent = REPLACE(@newcontent, 'very', 'excellent')

SET 
@xml.modify('replace value of (/root/info/text())[1]
                 with sql:variable("@newcontent")')

SELECT @xml

关于sql-server-2005 - 如何在 SQL Server 2005 中替换部分 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5869147/

相关文章:

sql - 在多个位置将字符插入字符串sql

SQL 2005 在分隔符上拆分逗号分隔列

jquery - 使用 Jquery 从 div 中删除文本

file - 如何删除文本文件中每行的前 x 个字符?

sql - 在 SQL Server 中检索具有相同前缀的所有 XML 元素

sql-server - SQL Server XML XQuery 选择 where 子句属性

sql-server - 需要帮助 Local.name(.) xquery 函数

sql-server-2005 - 连接到我的所有 SQL 服务器时出错

python - 选择行并替换值小于 Pandas 中特定值的列

java - 在不影响 java swing 中的应用程序的情况下检索 mssql 数据的最佳方法