如何返回xml值的text()与节点之间的空格值?

时间:2011-08-30 19:12:40

标签: sql-server-2008 xquery

在SQL Server 2008 R2中,

考虑以下xml

DECLARE @xml xml = '<data><fr>Chambre standard</fr><en>Standard room</en></data>';

如何返回以下字符串:

Chambre standard Standard room

目前,我只能通过使用

返回连接在一起而没有任何空格的字符串
SELECT @xml.query('//*/text()').value('.', 'varchar(max)')

返回

Chambre standardStandard room

但我需要在那里插入一个空格。

如何在节点文本之间插入空格?

1 个答案:

答案 0 :(得分:2)

您可以使用.nodes()来粉碎XML。

select T.N.value('local-name(.)', 'varchar(128)') as Name,
       T.N.value('.', 'varchar(max)') as Value
from @xml.nodes('/data/*') as T(N);

结果:

Name  Value
fr    Chambre standard
en    Standard room

然后您可以使用for xml path('')将其重新组合在一起。

select stuff((select ' '+T.N.value('.', 'varchar(max)')
              from @xml.nodes('/data/*') as T(N)
              for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '')

结果:

(No column name)
Chambre standard Standard room