Journal Question sur XSLT

Posté par  .
Étiquettes : aucune
0
10
déc.
2003
Bonjour !

je manipule un fichier XML avec une feuille de transformation XSL

mon fichier est en gros comme ça (j'ai viré ce qui sert à rien) :

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

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

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

Possible superior fait donc référence à une autre noeud objectClass, qui lui-même peut contenir d'autres référence

Je parcours mon fichier xml, et pour chaque noeud objectClass, je veux savoir le nombre de référence succéssive pour atteindre le noeud "user".
Dans mon exemple, il faut trouver "1" pour tata, "2" pour tutu et "3" pour toto.

Comment puis-je faire ?

N'hésitez pas non plus à me dire de remanier mon fichier, je suis ouvert :)

merci !
  • # Re: Question sur XSLT

    Posté par  (site web personnel) . Évalué à 1.

    Euh, tu tiens vraiment à le faire en XSLT ?
    Franchement tu parses en mémoire et zou tu codes ça :)
  • # Re: Question sur XSLT

    Posté par  . É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>
    • [^] # Re: Question sur XSLT

      Posté par  . Évalué à 1.

      merci beaucoup !!!

      je vais testé tout ça, ça m'a l'air très intéressant !

      tu égaies ma journée :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.