【发布时间】:2015-12-05 04:20:44
【问题描述】:
我想从表“Rubric”中删除属性“identifier”值不是“RESPONSE”的xmlnode <responseDeclaration>;其中包含字符串类型的“XMLString”列和 Xml 类型的“XMLNode”列。在删除节点"<responseDeclaration>" 之前,我们需要将要删除到临时变量中的节点的 Outerxml;在这种情况下是
"<responseDeclaration identifier="VH182077_zone_choice_list_9.RESPONSE" baseType="identifier" cardinality="single" />"
以下是“XMLNode”和“XMLString”列的内容
<assessmentItem xmlns:xi="http://www.w3.org/2001/XInclude" xmlns="http://www.imsglobal.org/xsd/imsqti_v2p2" timeDependent="false" title="ZonesSS" toolVersion="1.0" toolName="Rubric">
<responseDeclaration baseType="identifier" cardinality="single" identifier="RESPONSE">
<correctResponse>
<value>i3</value>
</correctResponse>
</responseDeclaration>
<responseDeclaration identifier="VH182077_zone_choice_list_9.RESPONSE" baseType="identifier" cardinality="single" />
<outcomeDeclaration baseType="float" cardinality="single" identifier="SCORE">
<defaultValue>
<value>0</value>
</defaultValue>
</outcomeDeclaration>
<responseProcessing template="http://www.imsglobal.org/question/qti_v2p1/rptemplates/match_correct_1.xml" />
</assessmentItem>
以下是我在两列中寻找的结果。我们在“Rubric”表中确实有这类记录。
<assessmentItem xmlns:xi="http://www.w3.org/2001/XInclude" xmlns="http://www.imsglobal.org/xsd/imsqti_v2p2" identifier="3c6e5f58-bd87-e511-ba0c-005056a8223d" timeDependent="false" title="ZonesSS" toolVersion="1.0" toolName="IAT Rubric">
<responseDeclaration baseType="identifier" cardinality="single" identifier="RESPONSE">
<correctResponse>
<value>i3</value>
</correctResponse>
</responseDeclaration>
<outcomeDeclaration baseType="float" cardinality="single" identifier="SCORE">
<defaultValue>
<value>0</value>
</defaultValue>
</outcomeDeclaration>
<responseProcessing template="http://www.imsglobal.org/question/qti_v2p1/rptemplates/match_correct_1.xml" />
</assessmentItem>
试图通过以下查询获取我想删除的节点的字符串值;但没有成功。
Declare @RDNode as
;WITH XMLNAMESPACES
('http://www.imsglobal.org/xsd/imsqti_v2p2' AS ns)
SET @RDNode= select cast(XmlString as xml).value('(/ns:assessmentItem/ns:responseDeclaration[2])[1]', 'nvarchar(max)')
FROM dbo.Rubric R WHERE R.[XML].exist('(/ns:assessmentItem/ns:responseDeclaration[2]/@identifier[contains(.,".RESPONSE")])')=1
WHERE ..
试图从“XMLNode”中删除第二个 ResponseDeclaration 节点
;WITH XMLNAMESPACES
('http://www.imsglobal.org/xsd/imsqti_v2p2' AS ns)
Update dbo.Rubric
SET [XMLNode].modify('replace value of (/ns:assessmentItem/ns:responseDeclaration[2])[1] with ""')
WHERE ....
【问题讨论】:
标签: sql-server xml tsql xquery-sql