sql - 使用 SQL 更新具有 XML 的表中的特定列
问题描述
我正在尝试更新其中包含多个命名空间的表中的特定列。我的表结构是:
+------+---------+-----------------------------------------------------------------------+
| cid | cidtype | xml_data |
+------+---------+-----------------------------------------------------------------------+
| 1001 | N | <Main xmlns:json=""http://www.samplenamespace.com/json"" > |
| | | <ID json:ValueType=""Number"">1001</ID> |
| | | <details> |
| | | <name xmlns:json=""http://www.samplenamespace.com/json"">John</name> |
| | | <age xmlns:json=""http://www.samplenamespace.com/json"">12</age> |
| | | </details> |
| | | </Main> |
| 1003 | N | <Main xmlns:json=""http://www.samplenamespace.com/json"" > |
| | | <ID json:ValueType=""Number"">1003</ID> |
| | | <details> |
| | | <name xmlns:json=""http://www.samplenamespace.com/json"">Diane</name> |
| | | <age xmlns:json=""http://www.samplenamespace.com/json"">25</age> |
| | | </details> |
| | | </Main> |
| 1004 | N | <Main xmlns:json=""http://www.samplenamespace.com/json"" > |
| | | <ID json:ValueType=""Number"">1004</ID> |
| | | <details> |
| | | <name xmlns:json=""http://www.samplenamespace.com/json"">Kippy</name> |
| | | <age xmlns:json=""http://www.samplenamespace.com/json"">26</age> |
| | | </details> |
| | | </Main> |
+------+---------+-----------------------------------------------------------------------+
在此表中,我想更改xml_data
列以删除http://www.samplenamespace.com/json
除<Main>
node 之外的所有子节点的命名空间。
我的查询:
update #final --#final is my table
set xml_data.modify(replace('xmlns:json="http://www.samplenamespace.com/json"',' ','') where.... ) -- I don't know to access the root node here
有什么帮助吗?
解决方案
由于您有两个元素需要清理,您可以在 xml_data 列上使用 sql replace 从 name 元素中删除命名空间,然后是 age 元素。这将使主要元素与所需的命名空间保持原样。
create TABLE [dbo].[foo]
(
cid int not null,
cidtype varchar(1) null,
xml_data varchar(max) null
)
go
insert into foo (cid,cidtype,xml_data) values
(1001,'N','<Main xmlns:json=""http://www.samplenamespace.com/json"" >
<ID json:ValueType=""Number"">1001</ID>
<details>
<name xmlns:json=""http://www.samplenamespace.com/json"">John</name>
<age xmlns:json=""http://www.samplenamespace.com/json"">12</age>
</details>
</Main>')
insert into foo (cid,cidtype,xml_data) values (1003, 'N',
'<Main xmlns:json=""http://www.samplenamespace.com/json"" >
<ID json:ValueType=""Number"">1003</ID>
<details>
<name xmlns:json=""http://www.samplenamespace.com/json"">Diane</name>
<age xmlns:json=""http://www.samplenamespace.com/json"">25</age>
</details>
</Main>')
insert into foo (cid,cidtype,xml_data) values (1004,'N',
'<Main xmlns:json=""http://www.samplenamespace.com/json"" >
<ID json:ValueType=""Number"">1004</ID>
<details>
<name xmlns:json=""http://www.samplenamespace.com/json"">Kippy</name>
<age xmlns:json=""http://www.samplenamespace.com/json"">26</age>
</details>
</Main>')
go
select * from foo
update foo
set xml_data = replace(xml_data, 'name xmlns:json=""http://www.samplenamespace.com/json""', 'name ')
go
update foo
set xml_data = replace(xml_data, 'age xmlns:json=""http://www.samplenamespace.com/json""', 'age ')
go
select * from foo
推荐阅读
- javascript - 我如何在不取消所有内容的情况下更新我的嵌套对象?
- matlab - 分段线性逼近
- c++ - 未在单个链表中正确创建节点
- flutter - 如何在颤动中缓存未来的字符串
- ios - iOS ARView.hitTest 限制为最大 100 米
- powershell - Powershell:如何删除除一个文件夹中的所有特定类型的文件
- javascript - 如何在 TypeScript 中创建用于写入表的 Apache 箭头向量
- angular - 使用排序的多个未知数量的垫表
- node.js - 我无法像 {{Users.1.title}} 这样从 Mongodb 获取我想要的数据
- c - Scanf 在 c 中的 while 循环的第二次迭代之前不保存变量