[XML/XSLT] transformation mineure

transformation mineure [XML/XSLT] - XML/XSL - Programmation

Marsh Posté le 18-05-2005 à 13:12:34    

Bonjour à tous,
 
 
 
J'ai une feuille de style qui fonctionne bien (elle me fait la transformation correctement).
 
Cependant, je ne saisi pas, meme apres mes diverses recherches, comment on fait pour renvoyer le flux original AVEC la transformation car pour l'instant je ne récupère que la transformation :(.
 
Mon fichier XSL :

Code :
  1. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
  2.     <xsl:output method="xml"/> 
  3.     <xsl:template match="/racine/node1/node2/node3"> 
  4.         <xsl:value-of select="montant_ht div pu"/> 
  5.     </xsl:template
  6. </xsl:stylesheet>


 
Mon fichier XML :

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <racine>
  3.     <node1>
  4.         <node2>
  5.             <node3>
  6.                 <qte></qte>
  7.                 <pu>200</pu>
  8.                 <montant_ht>500</montant_ht>
  9.             </node3>
  10.             <node3>
  11.                 <qte></qte>
  12.                 <pu>110</pu>
  13.                 <montant_ht>440</montant_ht>
  14.             </node3>
  15.         </node2>
  16.     </node1>
  17. </racine>


Message édité par dom01 le 18-05-2005 à 13:13:57
Reply

Marsh Posté le 18-05-2005 à 13:12:34   

Reply

Marsh Posté le 20-05-2005 à 10:51:28    

Je suppose que tu voudrais avoir le résultat du calcul dans la balise qte...  
 


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml"/>    
 
  <xsl:template match="@*|node()"><!-- recopier tous les elements et attribs -->
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
 
  <xsl:template match="qte"><!-- traitement particulier pour qte -->
    <xsl:copy>
      <xsl:value-of select="../montant_ht div ../pu"/>    
    </xsl:copy>
  </xsl:template>    
     
</xsl:stylesheet>  


 

Reply

Marsh Posté le 30-05-2005 à 11:59:02    

Merci bcp !!
 
C'est tout à fait ce que je souhaitais faire :)

Reply

Marsh Posté le 15-06-2005 à 15:35:35    

Un petit probleme tout de meme.
 
Une de mes nodes contient un attribut et celui-ci n'est pas copié :(
 
Y'a t-il autre chose à faire ?
 
Merci

Reply

Marsh Posté le 16-06-2005 à 10:09:00    

plus précisément?  

Reply

Marsh Posté le 16-06-2005 à 15:23:17    

Euh oubli cette histoire de copie d'attribut.
 
Par contre j'ai une autre question concernant les templates.
 
Imaginons j'ai un XML d'entrée avec un tag <qte>2</qte>
 
Dans mon XSL, j'ai un premier template qui me fait un premier calcul sur le tag <qte>.
Imaginons <qte>2</qte> devienne <qte>8</qte>.
 
maintenant j'ai un 2eme template qui a besoin du <qte> calculé précédement dans le premier template.
 
Le probleme c'est que dans mon 2eme template il prends toujours la valeur du XML et non celle calculée dans mon 1er template.
 
Une idée ?


Message édité par dom01 le 16-06-2005 à 15:25:14
Reply

Marsh Posté le 16-06-2005 à 15:34:13    

Logique... Ca s'appelle une transformation en chaîne, impossible à faire juste en XSLT. Il faut un langage derrière style PHP ou machin bidule qui te permettent de faire les deux transformations de suite...

Reply

Marsh Posté le 16-06-2005 à 15:41:24    

humm, je doute que ce soit l'unique facon de faire ce genre de manip.
 
D'apres ce que je sais on doit pouvoir appliquer une feuille de style sur une feuille de style. Ce qui dans mon cas devrait marcher. Mais je pense qu'il y a surement bcp plus simple.

Reply

Marsh Posté le 16-06-2005 à 15:46:23    

Non, on ne peut pas appliquer deux feuilles différentes [:spamafote] Déjà cherché...

Reply

Marsh Posté le 16-06-2005 à 15:52:39    

http://groups.google.fr/group/comp [...] 17807a1496
 

Citation :


the standard XSLT 1.0 way to do two transforms is just simply to use two  
xslt stylesheets and call one then the other. Even in a browser setting  
this is possible with a bit of javascript.  

Reply

Marsh Posté le 16-06-2005 à 15:52:39   

Reply

Marsh Posté le 16-06-2005 à 15:53:51    

Ben ouais, et ? Regarde la fin :

Citation :

Even in a browser setting this is possible with a bit of javascript.


C'est ce que j'ai dis avant :o Il faut un truc par derrière (JS, PHP, etc.), en XSLT seul c'est pas possible :o


Message édité par FlorentG le 16-06-2005 à 15:54:00
Reply

Marsh Posté le 16-06-2005 à 16:47:17    

FlorentG a écrit :


C'est ce que j'ai dis avant :o Il faut un truc par derrière (JS, PHP, etc.), en XSLT seul c'est pas possible :o


 
Je ne peut que confirmer... en XSLT 1.0 tu dois enfiler les transformations, donc xml + xslt1 = temp1, puis temp1 + xslt2 = result et ce qu'importe la 'colle' utilisée.
 
Note, je doute même que se soit prévu dans XSLT 2.0.


Message édité par avander le 16-06-2005 à 16:48:32
Reply

Marsh Posté le 16-06-2005 à 16:54:52    

Si, en 2.0 on peut faire à la chaîne :)

Reply

Marsh Posté le 16-06-2005 à 18:25:25    

euh faut pas s'enerver, je confirmais aussi tes propos :)

Reply

Marsh Posté le 16-06-2005 à 18:38:29    

Hopla :jap: :)

Reply

Marsh Posté le 17-06-2005 à 10:03:53    

FlorentG a écrit :

Si, en 2.0 on peut faire à la chaîne :)


 
Intéressant ça ( j'ai pas encore eu le temps de creuser la 2.0 sérieusement), ce qui est bien aussi c'est qu'on peut aussi générer plusieurs fichiers en sortie!
 
[mode détournement de topic on]
Un moteur XSLT 2.0 dispo/recommandé?
[mode détournement de topic off]


Message édité par avander le 17-06-2005 à 10:04:31
Reply

Marsh Posté le 17-06-2005 à 11:34:50    

Le 2.0 est encore à l'état de "Working Draft" (brouillon de travail), donc pas encore sorti :(

Reply

Marsh Posté le 17-06-2005 à 12:29:22    

Apparemment XmlSpy supporterait déjà XSLT 2.0 ( d'après leur site), j'avais testé bien avant et abandonné pour cause d'usine à gaz... préfère toujours mon éditeur de code et une transformation en ligne de commande...


Message édité par avander le 17-06-2005 à 12:30:02
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed