<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rs='urn:schemas-microsoft-com:rowset' xmlns:z='#RowsetSchema'
version="1.0">

<xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>

<xsl:template match="/data">
  <xsl:call-template name="element">
    <xsl:with-param name="el" select="."/>
  </xsl:call-template>
</xsl:template>

<xsl:template name="element">
  <xsl:param name="el"/>
    <div style="padding-left:10px">
      <![CDATA[<]]><xsl:value-of select="name($el)"/><xsl:text disable-output-escaping="yes"> </xsl:text>
      <xsl:for-each select="$el/@*">
        <xsl:value-of select="name(.)"/><![CDATA[=']]><xsl:value-of select='.'/><![CDATA[']]>
      </xsl:for-each>
      <xsl:choose>
        <xsl:when test="count(./*) &gt; 0">
          <![CDATA[>]]>
          <xsl:for-each select="./*">
            <xsl:call-template name="element">
              <xsl:with-param name="el" select="."/>
            </xsl:call-template>
          </xsl:for-each>
          <![CDATA[</]]><xsl:value-of select="name($el)"/><![CDATA[>]]>
        </xsl:when>
        <xsl:otherwise>
          <xsl:choose>
            <xsl:when test=".=''"><![CDATA[/>]]></xsl:when>
            <xsl:otherwise><![CDATA[>]]><xsl:value-of select="."/><![CDATA[</]]><xsl:value-of select="name(.)"/><![CDATA[>]]></xsl:otherwise>
          </xsl:choose>
        </xsl:otherwise>
      </xsl:choose>
  </div>
</xsl:template>

</xsl:stylesheet>

