我有以下xml:
<tr>
<td>Lycamobile</td>
<td>EV</td>
<td>5.00</td>
<td>0</td>
<td>0</td>
<td>13951</td>
<td>42</td>
<td>332</td>
<td>13951</td>
<td>0</td>
<td>0</td>
<td>332</td>
</tr>
<tr>
<td>Lycamobile</td>
<td>EV</td>
<td>10.00</td>
<td>0</td>
<td>0</td>
<td>6494</td>
<td>0</td>
<td>0</td>
<td>6494</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>Lycamobile</td>
<td>EV</td>
<td>15.00</td>
<td>0</td>
<td>0</td>
<td>7709</td>
<td>0</td>
<td>0</td>
<td>7709</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>Lycamobile</td>
<td>EV</td>
<td>20.00</td>
<td>0</td>
<td>300</td>
<td>8823</td>
<td>0</td>
<td>0</td>
<td>8823</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>Orange</td>
<td>ATC</td>
<td>5.00</td>
<td>0</td>
<td>0</td>
<td>10641</td>
<td>182</td>
<td>58</td>
<td>10641</td>
<td>0</td>
<td>0</td>
<td>58</td>
</tr>
<tr>
<td>Orange</td>
<td>ATC</td>
<td>10.00</td>
<td>0</td>
<td>0</td>
<td>6312</td>
<td>12</td>
<td>526</td>
<td>6312</td>
<td>0</td>
<td>0</td>
<td>526</td>
</tr>
<tr>
<td>Orange</td>
<td>ATC</td>
<td>15.00</td>
<td>0</td>
<td>0</td>
<td>7674</td>
<td>0</td>
<td>0</td>
<td>7674</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>Orange</td>
<td>ATC</td>
<td>20.00</td>
<td>0</td>
<td>0</td>
<td>8873</td>
<td>0</td>
<td>0</td>
<td>8873</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>Vodafone</td>
<td>EV</td>
<td>5.00</td>
<td>0</td>
<td>0</td>
<td>9911</td>
<td>0</td>
<td>0</td>
<td>9911</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
我想为第12个td子元素为58的每个tr添加一个属性。
这将是本例中的第5个
整个XML工件保存在变量@changesxml
中我到目前为止:
SET @changesxml.modify('insert
if (//tr/td[12]/text()="58")
then attribute style {"background-color: #FF8B6F;"}
else ()
as first into (/root/tr)[1] ')
但这会将它一直添加到第一个tr。
感谢任何帮助。
答案 0 :(得分:1)
由于
,它会一直添加到第一个tr(/root/tr)[1]
您告诉它将它添加到根元素下找到的第一个tr元素。
像这样的东西会为第一个发现第12个td值为58的那个:
SET @xml.modify('insert
attribute style {"background-color: #FF8B6F;"}
into (//tr[(td[12])/text()="58"])[1] ')
它只适用于找到的第一个,但这应该让你开始。你需要创建一个循环来获取所有这些。如果您创建循环并使最终索引器是动态的,那么您将需要将所有内容包装到sp_executesql中并将其作为单个命令运行。如果您尝试执行以下操作:
SET @xml.modify('insert
attribute style {"background-color: #FF8B6F;"}
into (//tr[(td[12])/text()="58"])[' + @val + '] ')
它会失败,因为.modify需要一个字符串文字。所以你需要做一些像
这样的事情declare @command nvarchar(1000)
declare @int int = 1
SET @command = '
SET @xml.modify(''insert
attribute style {"background-color: #FF8B6F;"}
into (//tr[(td[12])/text()="58"])[' + CAST(@int AS nvarchar(6)) + '] '') '
EXEC sp_executesql @stmt = @command,
@params = N'@xml xml out',
@xml = @xml OUTPUT
SELECT @xml
变量@int是你的计数器变量。