home *** CD-ROM | disk | FTP | other *** search
/ Programmer Plus 2007 / Programmer-Plus-2007.iso / Programming / XML Utilities / Professional Programmer XSL IDE / Xselerator25.msi / Data.Cab / F20094_flat2Tree.xsl < prev    next >
Encoding:
Text (UTF-16)  |  2001-10-02  |  4.8 KB  |  58 lines

  1. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  2.   <xsl:output indent="yes" omit-xml-declaration="yes"/>
  3.   <xsl:key name="kRow_f1_f2" match="row" use="concat(@folder1, '~', @folder2)"/>
  4.   <xsl:key name="kRow_f1" match="row" use="@folder1"/>
  5.   <xsl:key name="kRow_f2" match="row" use="@folder2"/>
  6.   <xsl:variable name="manySpaces" select="'                              '"/>
  7.   <xsl:variable name="linkList" select="/rows/row" />
  8.  
  9.   <xsl:template match="/">
  10.     <xsl:call-template name="constructHierarchy">
  11.       <xsl:with-param name="linkList" select="$linkList" />
  12.     </xsl:call-template>
  13.   </xsl:template>
  14.  
  15.   <xsl:template name="constructHierarchy">
  16.     <xsl:param name="linkList" select="/.." />
  17.  
  18.        <xsl:for-each select="$linkList[not(key('kRow_f2', @folder1))]">
  19.          <xsl:if test="count(. | key('kRow_f1', @folder1)[1])=1">
  20.            <xsl:call-template name="makeElement">
  21.              <xsl:with-param name="pElement" select="@folder1"/>
  22.              <xsl:with-param name="indent" select="0"/>
  23.            </xsl:call-template>
  24.         </xsl:if>
  25.       </xsl:for-each>
  26.   </xsl:template>
  27.  
  28.   <xsl:template name="makeElement">
  29.     <xsl:param name="pElement" select="'ErrorUnknown'"/>
  30.     <xsl:param name="indent" select="0"/>
  31.  
  32.     <xsl:text> </xsl:text>
  33.     <xsl:value-of select="substring($manySpaces, 1, $indent)"/>
  34.     <xsl:element name="{$pElement}">
  35.       <xsl:for-each select="key('kRow_f1', $pElement)
  36.                                     [
  37.                                       count(. | key('kRow_f1_f2',
  38.                                                      concat(@folder1,
  39.                                                             '~',
  40.                                                             @folder2
  41.                                                             )
  42.                                                     )[1]
  43.                                            ) = 1
  44.                                      ]">
  45.            <xsl:call-template name="makeElement">
  46.              <xsl:with-param name="pElement" select="@folder2"/>
  47.              <xsl:with-param name="indent" select="$indent + 2"/>
  48.            </xsl:call-template>
  49.       </xsl:for-each>
  50.  
  51.       <xsl:for-each select="key('kRow_f2', $pElement)">
  52.         <xsl:element name="{@lib}"/>
  53.       </xsl:for-each>
  54.  
  55.     </xsl:element>
  56.   </xsl:template>
  57. </xsl:stylesheet>
  58.