我在Sql server中定义了以下映射。
declare @map xml = '<Maps><Map From="1" To="2"/><Map From="3" To="4" /></Maps>';
我需要使用映射更改(示例)xml之后的属性Id
的值。但是,根元素可以是任何东西,我想保留所有其他属性。
declare @x xml;
set @x = '<XX><Value Id="1" OtherAttrs="..." /><Value Id="3" /></XX>';
-- Expect <XX><Value Id="2" OtherAttrs="..." /><Value Id="4" /></XX>
set @x = '<YY><Value Id="3" /><Value Id="1" OtherAttrs="..." /></YY>';
-- Expect <YY><Value Id="4" /><Value Id="2" OtherAttrs="..." /></YY>
select @x.query('...') -- How to write the xquery?
如何编写xquery脚本?
如果我只有两种根元素<XX>
和<YY>
怎么办?
答案 0 :(得分:0)
有点黑客,但请考虑以下
示例强>
tableView.rowHeight = UITableViewAutomaticDimension
<强>返回强>
declare @map xml = '<Maps><Map From="1" To="2"/><Map From="3" To="4" /></Maps>';
Declare @X xml = '<XX><Value Id="1" /><Value Id="3" /></XX>'
Select @X = Replace(cast(@X as varchar(max)),MapFrom,MapTo)
From (
Select MapFrom = 'Id="'+n.value('@From','varchar(max)')+'"'
,MapTo = 'Id="'+n.value('@To' ,'varchar(max)')+'"'
From @map.nodes('/Maps/*') as X(n)
) A
Select @X
如果它有助于可视化
子查询生成以下内容。
<XX>
<Value Id="2" />
<Value Id="4" />
</XX>
你可能会注意到我包含了完整的字符串MapFrom MapTo
Id="1" Id="2"
Id="3" Id="4"
这是为了避免冲突和过度使用。