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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  XSL : <xsl:element> !!! (poussons le vice !)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

XSL : <xsl:element> !!! (poussons le vice !)

n°756517
wishy
Posté le 08-06-2004 à 14:31:13  profilanswer
 

Re,
 
Je cherche cette fois ci à ajouter des élements à une balise que j'ai créé dynamiquement,
 
Voici mon code XSL :
 

Code :
  1. <xsl:for-each select='z:row'>
  2. <xsl:element name="{@NOM_FCT}" />
  3. </xsl:for-each>


 
Il me genere correctement mon xml :
 

Code :
  1. <TOTO_1 />
  2. <TOTO_2 />
  3. <TOTO_3 />


 
Je voudrais savoir par quelle maniere je pourrais rajouter des arguments à mes balises l'histoire que ca donne :
 

Code :
  1. <TOTO_1 var="my_var_01" />
  2. <TOTO_2 var="my_var_02" />
  3. <TOTO_3 var="my_var_03" />


 
Est ce possible ?
Je recupererais mes arguments depuis z:row.
 
Thx :]

mood
Publicité
Posté le 08-06-2004 à 14:31:13  profilanswer
 

n°756604
guiz
Posté le 08-06-2004 à 15:06:17  profilanswer
 

Cette fois c'est <xsl:attribute> qu'il faut que tu utilises ;)  
 
http://www.laltruiste.com/document [...] ibute.html
 
(je ne fais pas de pub pour ce site c'est juste le premier qui m'est venu à l'esprit)

n°756618
wishy
Posté le 08-06-2004 à 15:18:35  profilanswer
 

Tu es formidable, ca marche !
 
Allé, voici la feuille en cours (pas encore finie) :
 

Code :
  1. <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'
  2. xmlns:rs='urn:schemas-microsoft-com:rowset'
  3. xmlns:z='#RowsetSchema'
  4. exclude-result-prefixes='rs z'>
  5. <xsl:output method='xml' encoding='UTF-8' omit-xml-declaration='yes'/>
  6. <xsl:template match='/xml/rs:data'>
  7. <Functions>
  8. <xsl:for-each select='z:row'>
  9.  <xsl:element name="{@NOM_FCT}">
  10.   <xsl:for-each select='var'>
  11.    <xsl:element name="{@TYPE_VAR}-03A06L04-{@NOM_VAR}">
  12.     <xsl:attribute name="Type">
  13.      <xsl:value-of select="@TYPE_VAR" />
  14.     </xsl:attribute>
  15.    </xsl:element>
  16.   </xsl:for-each>
  17.  </xsl:element>
  18. </xsl:for-each>
  19. </Functions>
  20. </xsl:template>

n°756749
guiz
Posté le 08-06-2004 à 16:16:48  profilanswer
 

Je ne sais pas si j'ai bien compris ce que tu voulais faire mais j'aurais plutôt fait ça (j'ai viré les namespace rs et z) :
 

Code :
  1. <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
  2. <xsl:output method='xml' encoding='UTF-8' />
  3.  
  4. <xsl:template match="/xml/Data">
  5. <Functions>
  6.  <xsl:apply-templates select="./*" />
  7. </Functions>
  8. </xsl:template>
  9. <xsl:template match="row">
  10. <xsl:element name="{@NOM_FCT}">
  11.  <xsl:apply-templates select="./*" />
  12. </xsl:element>
  13. </xsl:template>
  14. <xsl:template match="var">
  15. <xsl:element name="{@TYPE_VAR}-03A06L04-{@NOM_VAR}">
  16.  <xsl:attribute name="Type">
  17.   <xsl:value-of select="@TYPE_VAR" />
  18.  </xsl:attribute>
  19. </xsl:element>
  20. </xsl:template>
  21. </xsl:stylesheet>


 
Ca me semble plus dans l'esprit du XSL.

n°756966
avander
Posté le 08-06-2004 à 18:37:14  profilanswer
 

 
Exact guiz, le for-each est destiné à un traitement hors context, la beauté et la force d'XSLT c'est justement de jouer avec de petits templates ad hoc.  
 
Je vois beaucoup de code ( sur HFR aussi) avec en gros un template match="/" et puis on traverse le document a coups de for-each...  :non:  même si on arrive à un résultat on perd tout le côté data driven de la solution... :ange:
 
Le for-each oui mais seulement en dernier recours dirais-je... :whistle:  

n°757542
ucl-madcow
LE Totophe du Net.
Posté le 09-06-2004 à 10:22:04  profilanswer
 

Chuis d'accord, Avander. On évolue avec le temps :)
Mon premier XSLT, je faisais pleins de for-each, et je ne savais pêcher mes données qu'une seule fois. (Très embetant), et après avoir un peu mieux compris le xml/xslt, j'ai pu utiliser des templates. Et encore là, je n'avais pas encore tout compris, et je faisais des trucs assez spécial. Maintenant, que je capte encore mieux, je fais des trucs assez propre.  
On évolue, et le XML évolue.. Rendez-vous dans 10 ans quand les normes XForm, XML Query, etc. seront vraiment finalisées... :)

n°757559
guiz
Posté le 09-06-2004 à 10:32:53  profilanswer
 

Par contre je me pose une question :  
les "apply-templates" sont une sorte d'appel récursif, ce qui est désastreux au niveau perf et utilisation mémoire, donc, sans parler de tout traiter avec des for-each bien sûr, ne serait-il pas utile d'utiliser des for-each lorsque l'on a besoin de rapidité d'exécution ?

n°757626
Mara's dad
Yes I can !
Posté le 09-06-2004 à 11:10:16  profilanswer
 

Guiz, je me suis souvent posé la question et je n'ai pas la réponse, il faudrait faire de tests pour voir si des for-each ne sont pas plus rapides.
 
Cependant, même si les for-each sont plus lisibles pour un programmeur normal, l'esprit XSL est bien basé sur les templates et donc on peut se dire que d'une part bien écrit, un code à base de templates est plus lisibles par les spécialistes XSL et que d'autre part on peut espérer que les Transformeurs sont optimisés pour l'utilisation des templates.
 
Reste que c'est quand même une manière de voir les choses assez déroutante pour un programmeur normal. A chaque fois que je fais du XSL, j'ai l'impression de mettre de coté mon cerveau de programmeur pour réveiller celui capable de comprendre XSL tellement c'est différent. Peut-être un jour parviendrai-je à les faire fonctionner ensemble :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°757653
avander
Posté le 09-06-2004 à 11:39:31  profilanswer
 

Guiz, dans les deux cas il faut de toute façon créer l'arbre xml de ton document en mémoire et le tout traverser donc la différence doit être infime, la performance est toujours au rendez-vous pcq. tout se passe en mémoire justement! La solution templates offre énormément de souplesse et permet de découper un gros problème en petites solutions élégantes  :)  
 
Mara's Dad, moi aussi j'étais complètement dérouté au début, je n'avais jamais rien vu de pareil, c'était vraiment un autre monde. C'est justement cette différence qui m'a motivé à creuser et très vite j'ai trouvé des applications sympa dans la gestion de contenu par exemple...
 
Bonne continuation!!
 


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

  XSL : <xsl:element> !!! (poussons le vice !)

 

Sujets relatifs
XSL : Création de balise dynamique ?supprimer un element !
inclure un xsl dans une xslSquelette de site web en XML/XSL ?
[JS]Calcul d'espace entre 2 élément.[XML] Lien entre le fichier xml et xsl
XSL : <xsl:if>XSL with-param & Jave
récupérer un autre xml dans un xsl pour travailler sur 2 xmlcomment passer une variable javascript a une variable xsl
Plus de sujets relatifs à : XSL : <xsl:element> !!! (poussons le vice !)


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