Click here to Skip to main content
6,595,854 members and growing! (17,727 online)
Email Password   helpLost your password?
Languages » XML » XML/XSLT     Intermediate

XML Pivot To XML

By Mike DiRenzo

This article describes how to convert an existing XML set of values that are contained in elements to valid elements of another XML, using an XSL transformation.
C#, XML, XSLT, Windows, .NET, Visual Studio, Dev
Posted:26 Mar 2007
Updated:27 Mar 2007
Views:16,510
Bookmarked:12 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
3 votes for this article.
Popularity: 1.43 Rating: 3.00 out of 5
2 votes, 66.7%
1

2

3
1 vote, 33.3%
4

5

Introduction

This article describes how to convert an existing XML set of values that are contained in elements to valid elements of another XML using a XSL transformation.

Overview

Pivoting an arbitrary set of data such that its values become columns is often accomplished using Excel's Pivot Table feature or maybe some complicated T-SQL statement. Using a simple XSL technique, one can accomplish this using instrinsic functions of XSL:

<xsl:variable/> and <xsl:element/>.

To be clear, let me qualify the source of xsl using the following common namespace declaration:

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

The XML

This simple XML data will be used to convert a particular value contained in a particular element to a valid XML element with said value as the element name. Confused? Think Pivot Table!

            <NewDataSet title="XMLPivotXML">
                <Table>
                    <Arg>ArgValue123</Arg>
                    <CtxtKeyID>CTXT123</CtxtKeyID>    
                    <CtxtName>ElementValue237</CtxtName>
                </Table>
                <Table>
                    <Arg>ArgValue196</Arg>
                    <CtxtKeyID>CTXT133</CtxtKeyID>
                    <CtxtName>ElementValue238</CtxtName>
                </Table>
            </NewDataSet>
        

The XSL

In the following example, I am using Arg as the desired value to convert to an element. Note the code snippet:

<xsl:variable name='arg'><xsl:value-of select="Arg" /></xsl:variable>

The intent is to convert all Arg element values to elements with said values as their respective names through transformation. In the following transformations, I replace Arg with other valid elements contained in the source XML. Here is the full XSL:

<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:template match="/"> 
        <args>
            <xsl:attribute name="ContextName">
                <xsl:value-of select="NewDataSet/@title"/>
            </xsl:attribute>
            <xsl:for-each select="//Table">
                <xsl:variable name='arg'><xsl:value-of select="Arg" />
                </xsl:variable>
                <xsl:element name='{$arg}'/>
            </xsl:for-each>
        </args>
    </xsl:template>
</xsl:stylesheet>        

The Transformation

Using Arg as the target element to convert, I get the following results:

 
            <args ContextName="XMLPivotXML">
                <ArgValue123 />
                <ArgValue196 />
            </args>
        

Using CtxtKeyID as the target element to convert, I get the following results:

 
            <args ContextName="XMLPivotXML">
                <CTXT123 />
                <CTXT133 />
            </args>
        

Using CtxtName as the target element to convert, I get the following results:

 
            <args ContextName="XMLPivotXML">
                <ElementValue237 />
                <ElementValue238 />
            </args>
        

As you can see, the possibilities are wide open with what one can accomplish using this simple technique. I was thinking of using this as a template function that accepts a parameter. Good luck and happy transforming!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Mike DiRenzo


Member
I have lived and worked throughout the globe (Brussels, London, Paris, West Indies, USA) as an IT consultant. My favorite S/W development concentrations are XML/XSLT, C#, Agile Model - Driven Development. I admire two well-renowned authors: Scott Ambler and Sal Mangano. Obviously there are many, many others but these two have been key to my successes over the years. I live and work in Charlotte, NC, USA and run a small S/W consulting practice called Business Automation Systems, Inc. I hold a Bachelors degree in Business with a concentration in Management Information Systems from the University of North Carolina at Charlotte.
Occupation: Web Developer
Location: United States United States

Other popular XML articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 10 of 10 (Total in Forum: 10) (Refresh)FirstPrevNext
GeneralCall me slow, but... PinsitebuilderShog97:57 26 Mar '07  
GeneralRe: Call me slow, but... Pinmemberbug menot10:51 26 Mar '07  
GeneralRe: Call me slow, but... PinmemberMike DiRenzo14:35 26 Mar '07  
GeneralRe: Call me slow, but... PinmemberMike DiRenzo14:35 26 Mar '07  
GeneralRe: Call me slow, but... PinmemberMike DiRenzo3:30 27 Mar '07  
GeneralRe: Call me slow, but... PinsitebuilderShog96:55 27 Mar '07  
Generalnice! Pinmemberbrady gaster7:42 26 Mar '07  
GeneralRe: nice! PinmemberMike DiRenzo14:35 26 Mar '07  
GeneralRe: nice! PinmemberMike DiRenzo3:28 27 Mar '07  
GeneralRe: nice! Pinmemberbrady gaster3:36 27 Mar '07  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 27 Mar 2007
Editor: Chris Maunder
Copyright 2007 by Mike DiRenzo
Everything else Copyright © CodeProject, 1999-2009
Web22 | Advertise on the Code Project