Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
794 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Émulation d'un héritage

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Émulation d'un héritage

n°1500059
esox_ch
Posté le 07-01-2007 à 19:07:46  profilanswer
 

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

mood
Publicité
Posté le 07-01-2007 à 19:07:46  profilanswer
 

n°1500071
0x90
Posté le 07-01-2007 à 19:55:21  profilanswer
 

import au lieu d'include et la base aura ses règles de priorité inférieure.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1500078
esox_ch
Posté le 07-01-2007 à 20:19:07  profilanswer
 

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 :
  1. <template name="head">
  2. <call-template name="head"/>
  3. <!-- Faire des autres actions -->
  4. </template>

n°1500085
0x90
Posté le 07-01-2007 à 20:43:45  profilanswer
 

Tu as la possibilité de faire un rendu 2 passes ou pas ?


Message édité par 0x90 le 07-01-2007 à 20:44:00

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1500095
esox_ch
Posté le 07-01-2007 à 21:56:05  profilanswer
 

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 :
  1. <element>
  2. <call-template name="head"/>
  3. </element>


 
Le reste du traitement devrait pouvoir se faire sans gros problèmes dans un deuxième temps

n°1500120
0x90
Posté le 07-01-2007 à 23:08:43  profilanswer
 

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.


Message édité par 0x90 le 07-01-2007 à 23:08:58

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1500121
esox_ch
Posté le 07-01-2007 à 23:15:42  profilanswer
 

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

n°1500122
0x90
Posté le 07-01-2007 à 23:19:45  profilanswer
 

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


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1500124
esox_ch
Posté le 07-01-2007 à 23:26:14  profilanswer
 

Ok.
Je vais tenter et après je reviens te dire.
Merci beaucoup pour ton aide

n°1523405
esox_ch
Posté le 04-03-2007 à 17:20:58  profilanswer
 

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 :
  1. <xsl:template name="callTemplateTransformer">
  2.     <xsl:param name="file"/>
  3.     <xsl:param name="elementName"/>
  4.     <xsl:if test="//template[name=$elementName]">
  5.         <xsl:call-template name="replace-string">
  6.             <xsl:with-param name="from"><call-template match="$elementName"></xsl:with-param>
  7.             <xsl:with-param name="to"><xsl:value-of select="document($file)//template[name=$elementName]"/></xsl:with-param>
  8.         </xsl:call-template>
  9.     </xsl:if>
  10. </xsl:template>
 

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 :
  1. <xsl:template name="transform">
  2.         <xsl:call-template name="callTemplateTransformer">
  3.             <xsl:with-param name="file">son.xsl</xsl:with-param>
  4.             <xsl:with-param name="elementName">table</xsl:with-param>
  5.         </xsl:call-template>
  6.     </xsl:template>
  7.     <xsl:template name="table">
  8.             <xsl:call-template name="createHeaders">
  9.              <xsl:with-param name="param">1</xsl:with-param>
  10.             </xsl:call-template>
  11.             <xsl:apply-templates select="*"/>
  12.    </xsl:template>
 

Et le fichier mère mere.xsl contenant entre autres :

 
Code :
  1. <xsl:template name="createHeaders">
  2.         <xsl:param name="colspan">2</xsl:param>
  3.            <value-of select="$colspan"/>
  4.     </xsl:template>
  5.    
  6.     <xsl:template name="table">
  7.             <xsl:call-template name="createHeaders"/>
  8.             <xsl:apply-templates select="*"/>
  9.     </xsl:template>
 

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?
   


Message édité par esox_ch le 04-03-2007 à 17:22:52

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
mood
Publicité
Posté le 04-03-2007 à 17:20:58  profilanswer
 

n°1523608
esox_ch
Posté le 05-03-2007 à 10:49:42  profilanswer
 

personne voit où je me suis planté? :(

n°1533096
esox_ch
Posté le 24-03-2007 à 08:28:38  profilanswer
 

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


Message édité par esox_ch le 24-03-2007 à 09:20:37

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Émulation d'un héritage

 

Sujets relatifs
Heritage et type de retour des methodesProblème héritage entre 2 classes
pb heritage[C# / XML] Créer une arborescence XML grâce à l'héritage
l'enchainement des pages :principe d'héritage php héritage en PHP
[Postgresql] recherche et heritagehéritage
DBDesigner 4 et l'héritagedebutant : pb d'héritage
Plus de sujets relatifs à : Émulation d'un héritage


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR