SQL Server 2005"FOR XML PATH"具有相同名称的多个标记

Chr*_*eek 3 xml sql sql-server

我有一个类似于以下的XML结构

<root>
    <person>
        <name>James</name>
        <description xsi:type="me:age">12</description>
        <description xsi:type="me:height>6 foot</description>
...
Run Code Online (Sandbox Code Playgroud)

我必须从表中拉出来......

姓名,年龄,身高

我正在尝试使用SQL 2005中的FOR XML路径,并使用类似的查询

SELECT
Name as 'name'
Age as 'description xsi:type="me:age"'
Height as 'description xsi:type="me:height"'
FOR XML PATH('person')
Run Code Online (Sandbox Code Playgroud)

但它给我一个关于'description xsi'命名空间丢失的错误.有没有办法使用FOR XML PATH实现这一点.实际查询比这个例子复杂得多,需要花费很多精力才能改变.

谢谢

edd*_*ves 5

FOR XML PATH有时候有点困难(至少从我所知道的).这可能会让你到达那里:

WITH XMLNAMESPACES('uri' as xsi)    
SELECT    
'me:age'     AS 'description/@xsi:type'    
,age         AS 'description'    
,name        AS 'name'   
,'me:height' AS 'description/@xsi:type'    
,height      AS 'description'    
FROM #test    
FOR XML PATH('person')
Run Code Online (Sandbox Code Playgroud)

生产:

<person xmlns:xsi="uri">
  <description xsi:type="me:age">32</description>
  <name>Alice</name>
  <description xsi:type="me:height">6 Foot</description>
</person>
<person xmlns:xsi="uri">
  <description xsi:type="me:age">24</description>
  <name>Bob</name>
  <description xsi:type="me:height">5 Feet 5 Inches</description>
</person>
Run Code Online (Sandbox Code Playgroud)