我需要合并两个数据。一个字段是一个包含URL的XML blob。第二个字段包含这些URL的标签。我需要在Web表单中显示它,但不能显示一个巨大的URL。
第1场
<string>www.google.com</string>
<string>www.yahoo.com</string>
Field 2
Google,Yahoo
我需要的结果是能够在字段2中生成带有标签的html链接。
所以我想要的结果是一个看起来像这样的字符串
<a href="http://www.google.com">Google</a><br><a href="http://www.yahoo.com">Yahoo</a>
依此类推......
我的例子是这样的:
select replace(cast(cast(replace(AnswerValue, 'xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"','') as xml).query('
for $string in //ArrayOfstring/string
return <a href="{data($string)}" target="_blank">TEST</a> ') as nvarchar(max)), '</a>', '</a><br>') as AttachedDocuments
我怎样才能做到这一点?有可能吗?
答案 0 :(得分:0)
你在想这样的事吗?
编辑:重新阅读你的问题并认为我错了......也许是这样的?
DECLARE @tbl TABLE(urls VARCHAR(MAX), names VARCHAR(MAX));
INSERT INTO @tbl VALUES
('<string>www.google.com</string><string>www.yahoo.com</string>','Google,Yahoo')
,('<string>www.test1.com</string><string>www.test2.com</string>','Test1,Test2');
SELECT '<a href="http://' + vals.XmlUrls.value('*[1]','varchar(max)') + '">' + vals.XmlNames.value('*[1]','varchar(max)') + '</a>'
+'<br>'
+'<a href="http://' + vals.XmlUrls.value('*[2]','varchar(max)') + '">' + vals.XmlNames.value('*[2]','varchar(max)') + '</a>'
FROM @tbl AS tbl
CROSS APPLY(SELECT CAST(urls AS XML) AS XmlUrls
,CAST('<x>' + REPLACE(names,',','</x><x>') + '</x>' AS XML) AS XmlNames
) AS vals
只需将其粘贴到空的查询窗口并执行即可。适应您的需求......
编辑前的方法:
DECLARE @urls XML=
'<root>
<url>
<string>www.google.com</string>
<string>www.yahoo.com</string>
</url>
<url>
<string>www.test1.com</string>
<string>www.test2.com</string>
</url>
</root>';
SELECT '<a href="http://' + value1 + '">' + name1 + '</a><br><a href="http://' + value2 + '">' + name2 + '</a>'
FROM @urls.nodes('/root/url') AS urls(url)
CROSS APPLY(SELECT urls.url.value('string[1]','varchar(max)') AS value1
,urls.url.value('string[2]','varchar(max)') AS value2) AS resolved
CROSS APPLY
(
SELECT CAST('<x>' + REPLACE(value1,'.','</x><x>') + '</x>' AS XML).value('x[2]','varchar(max)') AS name1
,CAST('<x>' + REPLACE(value2,'.','</x><x>') + '</x>' AS XML).value('x[2]','varchar(max)') AS name2
) AS names;