2010-12-22 6 views
0

Ich magzu Unpivot XML-Daten benötigen

<Results> 
    <Project> 
    <ID>111111</ID> 
    <Name>Test Project</Name> 
    <Abstract>This is a Test Project</Abstract> 
    <ShortName>Sample Project</ShortName> 
    <Language>ENG</Language> 
    </Project> 
</Results> 

Notwendigkeit ein XML-Daten habe jedes Element in Zeilen wie folgt zu konvertieren

1st row: 111111,ENG,ID,111111 
2nd row: 111111,ENG,Name,Test Project 
3rd row: 111111,ENG,abstract, This is a Test Project 
4th row: 111111,ENG,shortName, Sample Project 

Wie es zu tun?

+0

Planen Sie eine Skriptsprache verwenden? Wenn ja, welcher? –

Antwort

0

Können Sie XSLT verwenden, um das XML zu transformieren? Wenn dies der Fall ist, sollte etwas wie das untenstehende XSLT Ihnen gut tun.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" encoding="utf-8"/> 
<xsl:strip-space elements="*"/> 

<xsl:variable name='newline'><xsl:text> 
</xsl:text></xsl:variable> 

<xsl:template match="/Results/Project"> 
    <xsl:variable name="root" select="." /> 
    <xsl:for-each select="*"> 
     <xsl:value-of select="$root/ID/text()"/>,<xsl:value-of select="$root/Language/text()"/>,<xsl:value-of select="name()"/>,<xsl:value-of select="text()"/><xsl:value-of select="$newline"/> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 
0

Dies ist ein bisschen späte Antwort. Aber hier ist eine Lösung für SQL Server:

declare @x xml = 
'<Results> 
    <Project> 
     <ID>111111</ID> 
     <Name>Test Project</Name> 
     <Abstract>This is a Test Project</Abstract> 
     <ShortName>Sample Project</ShortName> 
     <Language>ENG</Language> 
    </Project> 
</Results>' 

select x.x.value('ID[1]/text()[1]', 'varchar(100)') 
    + ',' 
    + x.x.value('Language[1]/text()[1]', 'varchar(100)') 
    + ',' 
    + y.y.value('local-name(.)', 'varchar(100)') 
    + ',' 
    + y.y.value('text()[1]', 'varchar(100)') 
from @x.nodes('/Results[1]/Project[1]')x(x) 
cross apply x.x.nodes('node()[not(local-name()="Language")]')y(y)