更改 xml 根节点属性的值

Change value of a xml root node attribute

我正在尝试使用 T-SQL 修改 XQuery 中 XML 根属性的属性,但我没能做到。我的 XML 中有一个名称空间,我无法完全绕过它。当我查询 xml 的值时,我成功检索了该值,因为我使用:;WITH XMLNAMESPACES (DEFAULT 'some:namespace:here:v1')。我还尝试在 XQuery 中使用:'declare default element namespace "some:namespace:here:v1";' 但似乎不起作用。

关于如何实现此目标的任何想法?

这是我正在尝试修改的 XML 的示例。

DECLARE @XML_TO_READ XML = N'
    <F2101 xmlns="some:namespace:here:v1" propertyToModify="valueToModify">
        <person xmlns="some:namespace:here:v1" anotherPropertyToModify="anotherValueToModify" />
    </F2101>'

我这样检索值:

    ;WITH XMLNAMESPACES (DEFAULT 'some:namespace:here:v1')
    SELECT propertyToModify = 
@XML_TO_READ.value('(/F2101/@propertyToModify)[1]', 'nvarchar(50)')

我尝试修改(更新)这样的值:

SET @XML_TO_READ.modify('
    declare default element namespace "some:namespace:here:v1";
    replace value of (/F2101/propertyToModify/text())[1] with ("modifiedValue")')

我尝试了多种解决方案,但在这里没有找到适合我的特殊情况的解决方案。

提前致谢。

你的声明应该是:

SET @XML_TO_READ.modify('
declare default element namespace "some:namespace:here:v1";
replace value of (/F2101/@propertyToModify)[1] with ("modifiedValue")')

注意“@propertyToModify”而不是 "propertyToModify/text()"。

此外,文档 link:replace value of (XML DML)