Bonjour a tous,
je génére des fichiers xslt automatiquement à partir d'un fichier de mapping xml.
Cette génération se passe bien dans la plupart des cas sauf dans le cas particulier ou je rencontre des inversion de structure, exemple :
voilà ce que je parviens à générer pour l'instant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Source : */books/book/author Target : */author/books/book
ici, pas de problème ça fonctionne, si un author a écrit un livre il aura la liste de tout les livres
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <xsl:template match="author"> <xsl:variable name="books" select="*/books[book/author=current()"/> <xsl:apply-templates select="$books"/> </xsl:template>
par contre là ça pèche, le problème c'est que tout les auteurs sont valides selon cette condition
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <xsl:template match="books"> <xsl:variable name="book" select="*/books/book[author=current()/book/author"/> <xsl:apply-templates select="$book"/> </xsl:template>
Je pourrais très facilement corriger cela à la main en supprimant le premier template "books" qui est tout à fait inutile on s'en rend compte, mais au niveau de la génération automatique ceci n'est pas détéctable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <xsl:template match="book"> ... </xsl:template>
Pour l'instant la seule solution qui me vient à l'esprit c'est de passer l'"author" en paramètre à tout les templates.... mais c'est loin d'être simple au niveau de mon code....
Si quelqu'un connaît une façon de savoir dans quel Author on se trouve à ce moment là, c'est à dire, remonter d'un niveau dans mes templates et de trouver l'élément courant, cela pourrait grandement m'aider.
Merci d'avance pour votre temps et aide.
Partager