home *** CD-ROM | disk | FTP | other *** search
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
- <xsl:output indent="yes" omit-xml-declaration="yes"/>
- <xsl:key name="kRow_f1_f2" match="row" use="concat(@folder1, '~', @folder2)"/>
- <xsl:key name="kRow_f1" match="row" use="@folder1"/>
- <xsl:key name="kRow_f2" match="row" use="@folder2"/>
- <xsl:variable name="manySpaces" select="' '"/>
- <xsl:variable name="linkList" select="/rows/row" />
-
- <xsl:template match="/">
- <xsl:call-template name="constructHierarchy">
- <xsl:with-param name="linkList" select="$linkList" />
- </xsl:call-template>
- </xsl:template>
-
- <xsl:template name="constructHierarchy">
- <xsl:param name="linkList" select="/.." />
-
- <xsl:for-each select="$linkList[not(key('kRow_f2', @folder1))]">
- <xsl:if test="count(. | key('kRow_f1', @folder1)[1])=1">
- <xsl:call-template name="makeElement">
- <xsl:with-param name="pElement" select="@folder1"/>
- <xsl:with-param name="indent" select="0"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:for-each>
- </xsl:template>
-
- <xsl:template name="makeElement">
- <xsl:param name="pElement" select="'ErrorUnknown'"/>
- <xsl:param name="indent" select="0"/>
-
- <xsl:text>
</xsl:text>
- <xsl:value-of select="substring($manySpaces, 1, $indent)"/>
- <xsl:element name="{$pElement}">
- <xsl:for-each select="key('kRow_f1', $pElement)
- [
- count(. | key('kRow_f1_f2',
- concat(@folder1,
- '~',
- @folder2
- )
- )[1]
- ) = 1
- ]">
- <xsl:call-template name="makeElement">
- <xsl:with-param name="pElement" select="@folder2"/>
- <xsl:with-param name="indent" select="$indent + 2"/>
- </xsl:call-template>
- </xsl:for-each>
-
- <xsl:for-each select="key('kRow_f2', $pElement)">
- <xsl:element name="{@lib}"/>
- </xsl:for-each>
-
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>
-