Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何返回xml值的text(),在节点值之间留有空格?_Sql Server 2008_Xquery - Fatal编程技术网

Sql server 2008 如何返回xml值的text(),在节点值之间留有空格?

Sql server 2008 如何返回xml值的text(),在节点值之间留有空格?,sql-server-2008,xquery,Sql Server 2008,Xquery,在SQL Server 2008 R2中 考虑以下xml DECLARE @xml xml = '<data><fr>Chambre standard</fr><en>Standard room</en></data>'; 目前,我只能使用 SELECT @xml.query('//*/text()').value('.', 'varchar(max)') 哪个回报 Chambre standardStandard ro

在SQL Server 2008 R2中

考虑以下xml

DECLARE @xml xml = '<data><fr>Chambre standard</fr><en>Standard room</en></data>';
目前,我只能使用

SELECT @xml.query('//*/text()').value('.', 'varchar(max)')
哪个回报

Chambre standardStandard room
但我需要在里面插入一个空格

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

您可以使用
.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
(No column name)
Chambre standard Standard room
然后您可以对xml路径(“”)使用
将其重新组合在一起

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

Name  Value
fr    Chambre standard
en    Standard room
(No column name)
Chambre standard Standard room

除了just和之外,元素还会有其他元素吗?实际上可能不仅仅是fr和en(更多的语言),但您的解决方案暂时可以工作。我已经用我认为是改进的临时解决方案修改了代码。是否有在线文档更详细地解释“本地名称”?