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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Source : */books/book/author
Target  : */author/books/book
voilà ce que je parviens à générer pour l'instant :

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>
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="books">
	<xsl:variable name="book" select="*/books/book[author=current()/book/author"/>
	<xsl:apply-templates select="$book"/>
</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
<xsl:template match="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.

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.