xml - 如何使用 XQuery 更新 XML 变量中的属性值?

标签 xml tsql xpath sql-server-2012 xml-dml

尝试更新包含在变量中的 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()]: The target of 'replace' must be at most one node, found 'element(abc{http://abcsystems.com/}:PostalAddress,xdt:untyped) *'

整个XML中只有一个PostalAddress元素。错误告诉我什么?

最佳答案

如果没有实际的 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>

关于xml - 如何使用 XQuery 更新 XML 变量中的属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40871744/

相关文章:

xml - getElementsByTagName 在 VBA 中使用 DOMDOCUMENT60 返回零个元素

xml - 如何使用Xsl向Xml文件中的每个节点添加特定属性?

java - 使用java处理空的xml标签

android - 在 onMenuItemActionExpand 上显示 SearchView 内的按钮

java - 如何编写 contains 表达式 - Java Selenium

sql - 如何设置可在多个批处理中使用的 session 变量?

sql-server - SQL 服务器 : DELETE rows having more than 1 record (NULL)

SQL - 根据其他列的数据创建 "virtual"列

python - 为什么 lxml 找不到 Chrome 检查器给出的 xpath?

xml - 为什么简单的 XPATH 不起作用