Émulation d'un héritage - XML/XSL - Programmation
Marsh Posté le 07-01-2007 à 19:55:21
import au lieu d'include et la base aura ses règles de priorité inférieure.
Marsh Posté le 07-01-2007 à 20:19:07
Oui mais à ce moment là comment je fais pour appeler le template importé ?
Pour y voir plus clair, en gros ce que je voudrais faire c'est :
Code :
|
Marsh Posté le 07-01-2007 à 20:43:45
Tu as la possibilité de faire un rendu 2 passes ou pas ?
Marsh Posté le 07-01-2007 à 21:56:05
Mmm je vois pas trop bien comment je pourrais faire.
La partie qui me pose problème est que il faut que j'inclue le template importé dans un element parent.
En gros :
Code :
|
Le reste du traitement devrait pouvoir se faire sans gros problèmes dans un deuxième temps
Marsh Posté le 07-01-2007 à 23:08:43
Ce que tu peut faire c'est avoir ta hiérarchie de feuilles XSL d'un coté, puis un document xsl spécial qui va prendre en argument un fichier xsl et la transformer en une autre xsl avec pour règle :
"si je trouve un call-template avec attribut name égal au nom du template dans lequel je trouve le call-template, j'ouvre avec document() le fichier spécifié dans la balise import de la feuille xsl, je cherche un template du nom que j'ai trouvé et je copy ce que j'y trouve à la place du call template."
Tu applique cette feuille à tout tes documents xsl pour produire une nouvelle arborescence de documents xsl avec dépendances résolues, et ceux là tu les emploie dans tes xml.
Marsh Posté le 07-01-2007 à 23:15:42
M'oui mais si je ne me trompe pas, les import/include sont executés avant d'interpréter le XSL ... Je crois que c'était dans la FAQ qu'avait posté une fois jagstang
Marsh Posté le 07-01-2007 à 23:19:45
Aucun rapport, quand tu étudie les imports, ils sont du coté "fichier traité" c'est rien de plus qu'une balise qui s'appelle import dans un fichier xml qui a l'extention .xsl
Marsh Posté le 07-01-2007 à 23:26:14
Ok.
Je vais tenter et après je reviens te dire.
Merci beaucoup pour ton aide
Marsh Posté le 04-03-2007 à 17:20:58
Salut,
Je viens enfin de trouver le temps de tester ce que tu m'as conseillé.
Mais apparemment j'ai du mal comprendre parce que j'arrive pas.
Voilà ce que j'ai fait :
fichier callTemplateTransformer.xsl
Code :
|
Où replace-string est la template disponible ici : http://aspn.activestate.com/ASPN/C [...] cipe/65426
Ensuite, le fichier que je voudrais faire heriter d'un autre :
son.xsl
Code :
|
Et le fichier mère mere.xsl contenant entre autres :
Code :
|
L'erreur générée est :
XSLTProcessor::importStylesheet() [function.XSLTProcessor-importStylesheet]: compilation error: file mere.xsl line 54 element template /OutputPR.php 93 où la ligne 54 est la ligne de la definition du template "table"
Qu'est-ce que j'ai mal compris?
Marsh Posté le 24-03-2007 à 08:28:38
Après coup je me demande un truc:
Quand tu dis : "prendre en argument un fichier xsl et la transformer en une autre xsl avec pour règle". Tu veux dire qu'il va créer un fichier xsl temporaire ou il y a moyen de faire ça directement?
merci beaucoup
Marsh Posté le 07-01-2007 à 19:07:46
Bonjour,
Je cherche à construire une sorte d'héritage dans mes fichiers XSL. C'est à dire que j'ai un fichier base.xsl , inclu dans chaque fichier, et chaqu'un de ces fichiers peut lui-même être inclu dans un autre fichier et ainsi de suite.
Mon problème est le suivant:
Dans un fichier baseFichier.xsl, j'ai un template appelé "head", ensuite j'ai un deuxième fichier Ficheravancé.xsl, qui importe baseFichier.xsl mais dans lequel j'aimerais pouvoir redefinir le template head. En quelques sortes faire un equivalent en langage orienté objet d'un appel d'une classe fille à la classe parente puis de retourner des données differentes.
Je me doute bien que faire ça "out of box" n'est pas possible (étant donné que xsl se base sur une structure de template et non d'objets) mais est-ce que qqn connait un moyen d'y parvenir? Où alors d'esquiver le problème d'une autre manière?
Merci beaucoup