Bonjour,

Suite à un fonctionnement qui m'a été imposé, je dois trouver un moyen de mettre en place se comportement dans les fichiers XSLT que je vais devoir livrer. Des includes auraient pu suffire, mais je dois adapter le xPath des mes templates afin d'éviter de potentiels effets de bord, et c'est la que ça coince.

J'ai donc le fonctionnement suivant :
Des fichiers XML correspondant à des messages à envoyer (de différents types), composés d'objets (de différents types également).
Dans le système mis en place, il y a des versions, et bien entendu, les messages et les objets peuvent ne pas être compatible entre eux (ce que je cherche à transformer à l'aide de XSLT).

J'ai donc le système de transformation XSLT suivant :
Niveau 1) Un fichier de transformation appelant tout mes messages (2 fichiers par message, de la version 0 à 1 et de la 1 à 0)
Niveau 2) Les transformations des messages, chacun pouvant appeller 1 ou plusieurs objets
Niveau 3) Les transformations des objets (chacun étant indépendant)

Le problème que je rencontre est le suivant :
Dans message1, j'appelle l'objet1 à 3 reprises sur des paths différents (exemple : message1/objet1/toto, message1/objet1/bonjour ...), comment faire pour appeller les bonnes règles sur chaque path SANS avoir à écrire chaque path ?

J'entends par là, si j'écris quelque chose du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
    <xsl:template match="message1/objet1">
            <xsl:include href="objet1_0_vers_1.xsl"/>
    </xsl:template >
Je me retrouverais en sortie avec un fichier xsl suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
    <xsl:template match="message1/objet1/toto">
            codeCorrespondant
    </xsl:template >
    <xsl:template match="message1/objet1/bonjour">
            codeCorrespondant
    </xsl:template >
Lorsque j'ai essayé les imports (et les includes), je n'ai pas réussi à faire fonctionner un système équivalent.
Si j'avais "message1/objet1", cela n'active ni "message1/objet1/toto" ni "message1/objet1/bonjour", alors que j'aimerais activer les 2.

J'ai donc pensé produire un XSLT pour transformer mes XSLT avec quelque chose comme ça, sauf que je ne trouve pas comment concatené les 2 paths (par exemple "message1/objet1" et "objet1/toto" pour donner "message1/objet1/toto" et ainsi de suite pour tous les xsl:template présent dans objet1.)

Code présent dans message1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
    <replace match="message1/objet1">
            <xsl:include href="objet1_0_vers_1.xsl"/>
    </replace >
Code du XSLT de transformation de mes XSLT

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
    <xsl:template match="xsl:include">
          <xsl:for-each select="document(@href)/xsl:stylesheet/xsl:template">
             <xsl:copy-of select="."/>
          </xsl:for-each>
       </xsl:template>
 
       <xsl:template match="replace">
          <xsl:apply-templates/>
       </xsl:template>

En espérant avoir été le plus clair possible, et merci d'avance. (Et si vous avez une solution beaucoup plus simple qui me sauverait la vie, je prends.)