我需要从列中的Xml值中删除属性为A
且值为xxxx
的Xml元素。
方法1:
update t set x = x.query('//E[@A != "xxxx"]')
方法2:
update t set x.modify('delete /E[@A = "xxxx"]')
哪一个更好?
答案 0 :(得分:1)
两个电话都不会这样做:
<div>
<img src="http://lorempixel.com/500/333/nature/2" class="img-fluid">
<div class="comment d-inline-block align-top">
<div class="comment-header">
<span>title</span>
</div>
<blockquote>comment</blockquote>
</div>
</div>
- 尝试使用这种方法
DECLARE @xml XML=
N'<root>
<test pos="1" a="xxx">test 1</test>
<test pos="2" a="SomeOther">test 2</test>
<test pos="3" a="xxx">test 3</test>
<OtherElement>This is another element</OtherElement>
</root>';
- 或者尝试使用此
SET @xml=@xml.query(N'//test[@a!="xxx"]')
第一个结果是
SET @xml.modify(N'delete //test[@a="xxx"]')
SELECT @xml;
第二次返回时
<test pos="2" a="SomeOther">test 2</test>
XML不会存储为您看到的文字。它存储为表示复杂文档的树结构。要修改这很容易,只需要开出一些元素。 <root>
<test pos="2" a="SomeOther">test 2</test>
<OtherElement>This is another element</OtherElement>
</root>
方法必须重建XML并将第一个替换为新的XML。所以我的明确建议是:使用query()
方法!如果您对modify()
和XQuery
非常满意,FLWOR
方法会更强大,但这是另一个故事......