Search code examples
xmlxsltunpivot

Unpivot xml doc based on attributes


I have a simple xml document that looks like the following snippet. I need to write a XSLT transform that basically 'unpivots' this document based on some of the attributes.

<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:z="foo">
    <z:row A="1" X="2" Y="n1" Z="500"/>
    <z:row A="2" X="5" Y="n2" Z="1500"/>
</root>

This is what I expect the output to be -

<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:z="foo">
    <z:row A="1" X="2"  />
    <z:row A="1" Y="n1" />
    <z:row A="1" Z="500"/>
    <z:row A="2" X="5" />
    <z:row A="2" Y="n2"/>
    <z:row A="2" Z="1500"/>
</root>

Appreciate your help.


Solution

  • <xsl:template match="row">
        <row A="{$A}" X="{$X}" />
        <row A="{$A}" Y="{$Y}" />
        <row A="{$A}" Z="{$Z}" />
    </xsl:template>
    

    Plus obvious boilerplate.