2013-08-21 95 views
2

我有一個表有三個列的用戶:Id,Username,Email。將Sql錶轉換爲XML

我需要將其轉換爲XML的格式如下:

<Table Name="Users"> 
     <Column Name='Id'>1</Column> 
     <Column Name='Username'>user1</Column> 
     <Column Name='Email'>[email protected]</Column> 
</Table> 
<Table Name="Users"> 
     <Column Name='Id'>2</Column> 
     <Column Name='Username'>user2</Column> 
     <Column Name='Email'>[email protected]</Column> 
</Table> 

到現在爲止,我寫了這個:

select * from Users for xml raw('Table'), Elements, type 

,給了我這樣的結果:

<Table> 
     <Id>1</Id> 
     <Username>user1</Username> 
     <Email>[email protected]</Email> 
</Table> 
<Table> 
     <Id>2</Id> 
     <Username>user2</Username> 
     <Email>[email protected]</Email> 
</Table> 
+0

如果你不能讓SQL Server來這樣做,那麼它應該是比較容易進行後處理到這一點的形式,你想要的,但我不知道XSLT很好。如何對象的層次結構看起來像現在和想要的形式 - 會變得更難嗎? – Rup

回答

2
select 'Users' as [@Name], 
     (select 'Id'  as [@Name], Id  as '*' for xml path('Column'), type), 
     (select 'Username' as [@Name], Username as '*' for xml path('Column'), type), 
     (select 'Email' as [@Name], Email as '*' for xml path('Column'), type) 
from Users 
for xml path('Table'), type 

SQL Fiddle

+0

非常感謝! – enb081

1

不確定xsl解決方案在這裏是否合適。如果它是以下工作:

<?xml version="1.0" ?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" encoding="utf-8" indent="yes" /> 

    <xsl:template match="AllUsers"> 
     <xsl:apply-templates select="Table" /> 
    </xsl:template> 

    <xsl:template match="Table"> 
     <xsl:element name="{name()}"> 
      <xsl:apply-templates /> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="*"> 
     <Column> 
      <xsl:attribute name="Name">  
       <xsl:value-of select="name(.)" /> 
      </xsl:attribute> 
      <xsl:value-of select="." /> 
     </Column> 

    </xsl:template> 

</xsl:stylesheet> 

注意,AllUsers是源xml的根節點。