• # Re: Question sur XSLT

    Posté par . En réponse au journal Question sur XSLT. Évalué à 5.

    Salut FB,

    Voici un élément de réponse dans un projet j'ai eu à faire un truc similaire. Faut vérifier le code bien sur.
    Hope that helps
    - - - - - - - - - 8< - - - - - - -
    J'ai englobé le tout dans un noeud root.
    J'ai ajouté le template de base qui match 'objectClass'
    et le template recursif.

    - - - - - - XML - - - - - -

    <root>
    <objectClass name="toto">
    <possibleSuperior>titi</possibleSuperior>
    <possibleSuperior>tutu</possibleSuperior>
    </objectClass>

    <objectClass name="tutu">
    <possibleSuperior>tata</possibleSuperior>
    </objectClass>

    <objectClass name="tata">
    <possibleSuperior>user</possibleSuperior>
    </objectClass>
    </root>


    - - - - - XSL - - - - - - - - - - - - -

    <xsl:template match="objectClass">
    <xsl:for-each select="possibleSuperior">
    <xsl:variable name="valuePossibleSuperior" select="." />
    <xsl:choose>

    <xsl:when test="$valuePossibleSuperior = 'user'">
    <xsl:value-of select="1"/>
    </xsl:when>

    <xsl:otherwise>

    <xsl:call-template name="RecursiveSearch">
    <xsl:with-param name="Level" select="1"/> <!-- on passe le niveau courant -->
    <xsl:with-param name="Superior" select="$valuePossibleSuperior"/>
    </xsl:call-template>

    </xsl:otherwise>
    </xsl:choose>
    </xsl:for-each>

    </xsl:template>


    <xsl:template name="RecursiveSearch">
    <xsl:param name="Level"/> <!-- on reçoit le niveau de l'objectClass pere -->
    <xsl:param name="Superior" />

    <xsl:for-each select="root/objectClass[@name=$Superior]/possibleSuperior">
    <xsl:variable name="valuePossibleSuperior" select="." />

    <xsl:choose>
    <xsl:when test="$valuePossibleSuperior = 'user'">
    <xsl:value-of select=" number($Level) + 1"/>
    </xsl:when>
    <xsl:otherwise>
    <xsl:call-template name="RecursiveSearch">
    <xsl:with-param name="Level" select="number($Level) + 1"/> <!-- on passe le niveau courant -->
    <xsl:with-param name="Superior" select="$valuePossibleSuperior"/>
    </xsl:call-template>
    </xsl:otherwise>
    </xsl:choose>
    </xsl:for-each>

    </xsl:template>