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 TImaniac (site web personnel) . Évalué à 1.
Franchement tu parses en mémoire et zou tu codes ça :)
[^] # Re: Question sur XSLT
Posté par Nap . Évalué à 1.
[^] # Re: Question sur XSLT
Posté par Rage . Évalué à 1.
http://www-106.ibm.com/developerworks/xml/library/x-xslrecur/?loc=d(...)
# Re: Question sur XSLT
Posté par Narmer . Évalué à 5.
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 Nap . Évalué à 1.
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.