如何从sql server 2008中的XML变量中删除属性?
我有一个名为XML的表(在SQL Server 2008中),它有一个XML
类型的字段叫XmlDocument
。我试图从XML变量中删除一个属性。如何从sql server 2008中的XML变量中删除属性?
这里是我的XML看起来像
<clue_personal_auto xmlns="http://cp.com/rules/client">
<admin>
<receipt_date>03/16/2011</receipt_date>
<date_request_ordered>03/16/2011</date_request_ordered>
<report_usage>Personal</report_usage>
</admin>
</clue_personal_auto>
我查询
UPDATE XML
SET XmlDocument.modify('delete (/clue_personal_auto/@xmlns)[1]')
WHERE xmlid = 357
当我查询分析器中运行此查询我看到消息“1行(S)的影响”,但在现实中clue_personal_auto元素的xmlns属性未被删除。任何想法我做错了什么。
感谢 BB
我似乎无法找到一个简单的方法来做到这一点的例子 - 但真正的问题是:为什么你要删除的命名空间?使用WITH XMLNAMESPACES ...
构造,您可以轻松地使用名称空间。
而不是花大力气摆脱它 - 了解XML名称空间并开始使用它们!
你可以很容易地使用XML命名空间在查询:
;WITH XMLNAMESPACES (DEFAULT 'http://cp.com/rules/client')
SELECT
XmlDocument.value('(/clue_personal_auto/admin/report_usage)[1]', 'varchar(25)')
FROM XML
WHERE ID = 357
,并很乐意与它 - 没有必要人为删除xmlns=
声明了!
谢谢Marc_s,帮助和工作.. :-) – BumbleBee 2011-03-17 22:33:08
摆脱名称空间的一个原因是,他们打破了以前从未与他们一起工作的许多遗留代码。在我的应用程序中,名称空间不起作用(除了使现有的XPath命令停止工作外)。 – 2013-11-29 16:58:03
您需要使用WITH xmlnamespaces,否则 “/ clue_personal_auto” 不匹配的命名空间clue_personal_auto xmlns="..."
节点。
不仅如此,因为它不是一个普通的属性,所以不能实际删除名称空间。
除去常规属性
declare @xml table (xmlid int, xmldocument xml)
insert @xml select 357, '
<clue_personal_auto xmlns="http://cp.com/rules/client" otherattrib="x">
<admin>
<receipt_date>03/16/2011</receipt_date>
<date_request_ordered>03/16/2011</date_request_ordered>
<report_usage>Personal</report_usage>
</admin>
</clue_personal_auto>'
;WITH XMLNAMESPACES ('http://cp.com/rules/client' as ns)
UPDATE @XML
SET XmlDocument.modify('delete (/ns:clue_personal_auto/@otherattrib)[1]')
WHERE xmlid = 357
select * from @xml
谢谢理查德,那太棒了。 – BumbleBee 2011-03-17 22:34:17
UPDATE XML
SET CONVERT(XML, REPLACE(CONVERT(NVARCHAR(MAX), XmlDocument), N' xmlns=...'))
WHERE ID = 357
不错 - 蛮力但有效! – 2013-11-29 16:58:40
(1行受影响)仅表示您执行了更新。如果有时间戳列,它将会改变。正如'update tbl set id = id'也成功,但什么都不做 – RichardTheKiwi 2011-03-17 22:16:03
请注意SQL.Server函数'.modify()'使用供应商的[XML数据修改语言](http://msdn.microsoft.com/ en-us/library/ms177454.aspx) – 2011-03-17 22:54:39