【发布时间】:2020-04-06 22:47:13
【问题描述】:
我只想提取那些具有特定子节点并且该子节点应该具有值的节点。 例如:
xmlDoc = <Report>
<Version>
<RecordId>1</RecordId>
<Note>abcd</Note>
</Version>
<Version>
<RecordId>2</RecordId>
<Note>efgh</Note>
<Rindicator>1</Rindicator>
</Version>
<Version>
<RecordId>3</RecordId>
<Note>ijkl</Note>
<Rindicator>1</Rindicator>
</Version>
<Version>
<RecordId>4</RecordId>
<Note>ijkl</Note>
<Rindicator>0</Rindicator>
</Version>
</Report>
结果应该是
<Report>
<Version>
<RecordId>2</RecordId>
<Note>efgh</Note>
<Rindicator>1</Rindicator>
</Version>
<Version>
<RecordId>3</RecordId>
<Note>ijkl</Note>
<Rindicator>1</Rindicator>
</Version>
</Report>
我尝试了以下但没有得到预期的结果。
DECLARE @RindVal varchar(2) = '1'
UPDATE #TempTable
SET xmlDoc.modify('delete /*:Report/*:Version[*:Rindicator != sql:variable("@RindVal")]');
【问题讨论】:
-
你可以否定 Rindicator 对变量的相等性。这将包括缺少 Rindicator 元素的版本节点:
.modify('delete /*:Report/*:Version[not(*:Rindicator = sql:variable("@RindVal"))]'); -
谢谢你的工作。如果您可以将其作为答案,我可以将其标记为。
-
..@BumbleBee...:),您可以发布答案(在命名空间通配符下划线)以供参考。它对遇到类似问题的任何人都非常有用。
标签: sql-server xml xpath