更改 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)。
我正在尝试使用 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)。