尝试更新变量中包含的XML中的一个属性:
set @x.modify('declare namespace abc="http://abcsystems.com/";
replace value of
(/abc:App/abc:Client/abc:Addresses/abc:PostalAddress)[@AddressLine1] with "555 Service Rd."')
在@AddressLine1[1]
上有或没有下标的情况下尝试过。
这会引发错误:
Msg 2337,Level 16,State 1,Line 8
XQuery [modify()]:'替换'的目标找到的最多只能是一个节点 '元素(abc {http://abcsystems.com/}:PostalAddress,xdt:untyped)*'
整个XML中只有一个PostalAddress
元素。什么错误告诉我?
答案 0 :(得分:2)
如果没有实际的XML,这是盲目的,但你可能正在寻找这个:
set @x.modify('declare namespace abc="http://abcsystems.com/";
replace value of
(/abc:App/abc:Client/abc:Addresses/abc:PostalAddress/@AddressLine1)[1] with "555 Service Rd."')
(xpath here)[1]
通常用于强制执行单个节点
declare @x xml=
N'<abc:App xmlns:abc="http://abcsystems.com/">
<abc:Client>
<abc:Addresses>
<abc:PostalAddress AddressLine1="test" />
</abc:Addresses>
</abc:Client>
</abc:App>';
set @x.modify('declare namespace abc="http://abcsystems.com/";
replace value of
(/abc:App/abc:Client/abc:Addresses/abc:PostalAddress/@AddressLine1)[1]
with "555 Service Rd."');
select @x;
结果
<abc:App xmlns:abc="http://abcsystems.com/">
<abc:Client>
<abc:Addresses>
<abc:PostalAddress AddressLine1="555 Service Rd." />
</abc:Addresses>
</abc:Client>
</abc:App>