feuille de style xsl ?

feuille de style xsl ? - XML/XSL - Programmation

Marsh Posté le 09-10-2006 à 10:56:15    

salut,
 
je dispose d'un document xml qui se presente ainsi
 

Citation :

<TABLE NOM ="PILOTE" >
<CHAMPS INTITULE ="NOM"/>
<CHAMPS INTITULE ="PRENOM"/>
<CHAMPS INTITULE ="VILLE"/>
<CHAMPS INTITULE ="AGE"/>
....
</TABLE>
<TABLE NOM ="VOL" >
....  


 
 
 
ce que je souhaiterais serai un doc html qui m'affiche cela
 
 

Citation :

PILOTE
NOM
PRENOM
VILLE
AGE
 
VOL
...  


 
 
donc j'ai fait une feuille xsl
 
 

Code :
  1. <?xml version="1.0"?>
  2. <xsl:stylesheet
  3. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4. xmlns="http://www.w3.org/TR/REC-html40"
  5. result-ns="">
  6. <xsl:template match="/">
  7.  <HTML>
  8.  <HEAD>
  9.    <TITLE>Tables</TITLE>
  10.  </HEAD>
  11.  <BODY BGCOLOR="#FFFFFF">
  12.  <xsl:apply-templates/>
  13.  </BODY>
  14.  </HTML>
  15. </xsl:template >
  16. <xsl:template match="TABLE">
  17. <h1>
  18.    <xsl:apply-templates select="@NOM" />
  19.    </h1>
  20. <xsl:template match="CHAMPS">
  21. <h4>
  22.    <xsl:apply-templates select="@NOM" />
  23.    </h4>
  24. </xsl:template >
  25. </xsl:template >
  26. </xsl:stylesheet>


et quand je lance mon code
j'obtiens cette structure HTML :
 
 

Citation :

<HTML><HEAD><TITLE>Tables</TITLE></HEAD><BODY BGCOLOR="#FFFFFF">
 
 
<h1>PILOTE</h1><xsl:template match="CHAMPS"/><h4>PILOTE</h4>
<h1>VOL</h1><xsl:template match="CHAMPS"/><h4>VOL</h4>
</BODY></HTML>  


 
 
au lieu d'avoir
 
 

Citation :

<HTML><HEAD><TITLE>Tables</TITLE></HEAD><BODY BGCOLOR="#FFFFFF">
 
 
<h1>PILOTE</h1>
<h4>NOM</h4>
<h4>PRENOM</h4>
<h4>VILLE</h4>
<h4>AGE</h4>
....
</BODY></HTML>  


 
 
comment ça se fait ??,
 
Merci

Reply

Marsh Posté le 09-10-2006 à 10:56:15   

Reply

Marsh Posté le 09-10-2006 à 11:14:21    

Ca m'étonne que ton parser ne pousse pas de gueulante parce qu'a mon avis nester des xsl:templates... c'est pas top!
 

Code :
  1. <xsl:template match="/">
  2.   ...
  3. </xsl:template>
  4. <xsl:template match="TABLE">
  5.   <h1><xsl:value-of select="@NOM" /></h1>
  6. </xsl:template>
  7. <xsl:template match="CHAMPS">
  8.   <h4><xsl:value-of select="@INTITULE" /></h4>
  9. </xsl:template>


 
Faut diviser pour reigner... surtout en XSL-T!

Reply

Marsh Posté le 09-10-2006 à 11:21:46    

le truc est quand je divise
<xsl:template match="TABLE">  
 

Citation :


<h1>
   <xsl:apply-templates select="@NOM" />  
   </h1>
 
 </xsl:template >
 
<xsl:template match="CHAMPS">  
 
 
<h4>
   <xsl:apply-templates select="@INTITULE" />  
   </h4>
 
 </xsl:template >


 
j'obtien cela seulement

Citation :


<h1>PILOTE</h1>
<h1>VOL</h1>
 
je n'ai pas les champs correspondant

Reply

Marsh Posté le 09-10-2006 à 12:51:06    

Sorry, j'avais zappé que les CHAMPS sont imbriqués dans TABLE ( ce qui est logique finalement). Il faut simplement relancer la 'machine à transformations' après le traitement de TABLE, comme ceci:

Code :
  1. ...
  2. <xsl:template match="TABLE">
  3.   <h1><xsl:value-of select="@NOM" /></h1>
  4.   <xsl:apply-templates />
  5. </xsl:template>
  6. ...

Reply

Marsh Posté le 09-10-2006 à 13:38:49    

heu j'ai pas trop saisi
relancer la machine ..??

Reply

Marsh Posté le 09-10-2006 à 14:11:05    

il faut un <xsl:apply-templates /> pour relancer la machine...

Reply

Marsh Posté le 09-10-2006 à 14:21:31    

pourtant je la relance bien à chaque fois la machine,
pour la table et pour les champs  
 
 

Code :
  1. <xsl:template match="TABLE">
  2. <h1>
  3.    <xsl:apply-templates select="@NOM" />
  4.    </h1>
  5. </xsl:template >
  6. <xsl:template match="CHAMPS">
  7. <h4>
  8.    <xsl:apply-templates select="@INTITULE" />
  9.    </h4>
  10. </xsl:template >
  11. </xsl:stylesheet>

Reply

Marsh Posté le 09-10-2006 à 16:04:26    

Oui, tu la relances c'est sur... mais pourquoi faire?
 
A l'intérieur du template TABLE, le parseur est dans la balise TABLE et tu lui demandes de s'occuper des attributs NOM et rien d'autre, la transformation s'arrête donc...
 
Quand le parseur est dans la balise TABLE il doit juste te donner la valeur de l'attribut NOM et ensuite reprendre le processus de façon générale, pas en se limitant aux attributs NOM...
 
Le méchanisme de transformation n'a pas encore fait TILT chez toi je pense, c'est normal ça demande un peu de recul parce que c'est une approche assez différente de la programmation.
 

Reply

Marsh Posté le 09-10-2006 à 16:16:00    

ok donc en faite fallait que je rajoute
<xsl:apply-templates/> juste apres avoir traité les tables

Code :
  1. <xsl:apply-templates/>
  2. </xsl:template >
  3. <xsl:template match="CHAMPS">
  4. <h4>


 
c'est clair que le mecanisme de transformation est pas evident à comprendre

Reply

Marsh Posté le 10-10-2006 à 10:12:48    

je souhaite afficher les champs dans un tableau
donc j'ai fait cela

Code :
  1. <h1>
  2.    <xsl:apply-templates select="@NOM" />
  3.    </h1>
  4. <xsl:apply-templates/>
  5. </xsl:template >
  6. <table>
  7. <xsl:apply-templates/>
  8. <xsl:template match="CHAMPS">
  9. <tr>
  10.    <td>INTITULE: <xsl:apply-templates select="@INTITULE" /></td>
  11.    <td>TYPE: <xsl:apply-templates select="@TYPE" /></td>
  12.    </tr>
  13. </xsl:template >
  14. </table>
  15. <xsl:apply-templates/>


 
 
je relance bien la machine avec <xsl:apply-templates/> avant et apres ma balise <table> et pourtant àl'affichage je n'ai que les nom des tables et les champs on disparu
PILOTE
 
 
 
VOL
 

Reply

Marsh Posté le 10-10-2006 à 10:12:48   

Reply

Marsh Posté le 10-10-2006 à 10:22:26    

j'ai trouver ce lien
http://xmlfr.org/documentations/faq/010117-0003
qui est pas mal mais je pense qu'il s'applique dans mon cas car je recupere la valeur des champs dans les attribut des balises et pas entre les balises.
donc je pense que c'est impossible

Reply

Marsh Posté le 10-10-2006 à 15:06:12    

Le code que tu poste me donne le tournis...  :pt1cable:  
 
Les lignes 9 et 10 ne riment à rien ils se trouvent entre les templates???????????
 
Le template à la ligne 12 est executé pour chaque balise CHAMP de ton xml, tu dois juste dire ce qu'il faut faire comme transformation! Les balises CHAMP ne contiennent plus d'autres balises donc tes apply-templates ne servent à rien, enfin si: ils t'induisent en erreur. C'est des xsl:value-of que tu dois faire.  
 


<xsl:template match="CHAMPS">
  <tr>
    <td>INTITULE: <xsl:value-of select="@INTITULE" /></td>
    <td>TYPE: <xsl:value-of select="@TYPE" /></td>
  </tr>
</xsl:template >


 
Les lignes 24 et 25 idem, ils se trrouvent entre les templates, c'est quoi se délire???????????
 
Dis-moi le nom de ton parseur pour que je puisse le fuir comme la peste....

Reply

Marsh Posté le 10-10-2006 à 15:40:42    

j'utilise XML::Parser sous perl et il les a bien accepter

Reply

Marsh Posté le 10-10-2006 à 15:58:25    

ben il a tord... un stylesheet est un document xml comme un autre et il doit répondre a un schema ou une DTD.  
 
La balise xsl:stylesheet n'est pas sensé avoir une balise fille comme xsl:apply-templates...

Reply

Marsh Posté le 10-10-2006 à 16:26:17    

toute maniere j'ai les boules
je tourne en rond sur google je trouve rien sur XML:: Parser
les cours de bases sur le perl y n'en parle pas

Reply

Marsh Posté le 11-10-2006 à 10:58:14    

si tu en disais un peu plus sur ton environnement de travail?  
 
sous Win, le plus simple c'est de travailler avec MSXSL.EXE. Tu lui fournit ton xml et ton xsl en ligne de commande et il te crache la transformation.  
Ton éditeur préféré suffit pour se lancer...

Reply

Marsh Posté le 11-10-2006 à 11:25:44    

le truc est que je dois le faire obligatoirement en perl
je les ai modifier les lignes ça me paraissai aussi bizarre (j'avais vu sa sur un site pour debutant en xslt)donc j'ai mis value-of select;

Reply

Marsh Posté le 31-10-2006 à 00:33:39    

voici un "petit" exemple de feuille XSL que j'utilise pour generer mon cv en html
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2.   <!--  Fichier XSL servant à la représentation du CV
  3.   -->
  4.   <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  5.   <xsl:output method="html" />
  6.   <xsl:template match="resume">
  7.   <html>
  8.   <head>
  9.   <title>Resume Dauvergne Sébastien</title>
  10.   </head>
  11.   <body>
  12.   <xsl:apply-templates select="identity" />
  13.   <xsl:apply-templates select="qualification" />
  14.   <xsl:apply-templates select="knowledge" />
  15.   <xsl:apply-templates select="professional_experience" />
  16.   <xsl:apply-templates select="foreign_language" />
  17.   <xsl:apply-templates select="extracurricular_activities" />
  18.   <small>
  19.   <xsl:value-of select="update" />
  20.   </small>
  21.   </body>
  22.   </html>
  23.   </xsl:template>
  24.   <!-- identity
  25.   -->
  26.   <xsl:template match="identity">
  27.   <xsl:apply-templates select="name" />
  28.   <xsl:apply-templates select="address" />
  29.   <xsl:apply-templates select="telephone" />
  30.   <xsl:apply-templates select="internet" />
  31.   </xsl:template>
  32.   <xsl:template match="name">
  33.   <p>
  34.   <b>
  35.   <xsl:value-of select="surname" />
  36.   <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
  37.   <xsl:value-of select="firstname" />
  38.   </b>
  39.   </p>
  40.   </xsl:template>
  41.   <xsl:template match="address">
  42.   <p>
  43.   <xsl:value-of select="street" />
  44.   <br />
  45.   <xsl:value-of select="postcode" />
  46.   <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
  47.   <xsl:value-of select="city" />
  48.   <br />
  49.   <xsl:value-of select="country" />
  50.   </p>
  51.   </xsl:template>
  52.   <xsl:template match="telephone">
  53.   <p>
  54.   mobile :
  55.   <xsl:value-of select="mobile" />
  56.   <br />
  57.   home :
  58.   <xsl:value-of select="home" />
  59.   </p>
  60.   </xsl:template>
  61.   <xsl:template match="internet">
  62.   <p>
  63.   email :
  64.   <a href="mailto:dauvergne.sebastien@neuf.fr">
  65.   <xsl:value-of select="email" />
  66.   </a>
  67.   <br />
  68.   <xsl:variable name="site">
  69.   <xsl:value-of select="website" />
  70.   </xsl:variable>
  71.   website :
  72.   <a href="http://dauvergne.sebastien.free.fr">
  73.   <xsl:value-of select="$site" />
  74.   </a>
  75.   </p>
  76.   </xsl:template>
  77.   <!-- qualification
  78.   -->
  79.   <xsl:template match="qualification">
  80.   <h2>Qualification</h2>
  81.   <p>
  82.   <xsl:apply-templates select="degree" />
  83.   </p>
  84.   </xsl:template>
  85.   <xsl:template match="degree">
  86.   <xsl:value-of select="date" />
  87.   :
  88.   <xsl:value-of select="title" />
  89.   <br />
  90.   <xsl:value-of select="establishment" />
  91.   <br />
  92.   <br />
  93.   </xsl:template>
  94.   <!-- knowledge
  95.   -->
  96.   <xsl:template match="knowledge">
  97.   <h2>Computer Knowledge</h2>
  98.   <p>
  99.   <xsl:apply-templates select="skill" />
  100.   </p>
  101.   </xsl:template>
  102.   <xsl:template match="skill">
  103.   <xsl:value-of select="subject" />
  104.   :
  105.   <xsl:value-of select="description" />
  106.   <br />
  107.   <br />
  108.   </xsl:template>
  109.   <!-- professional_experience
  110.   -->
  111.   <xsl:template match="professional_experience">
  112.   <h2>Professional Experience</h2>
  113.   <p>
  114.   <xsl:apply-templates select="job" />
  115.   </p>
  116.   </xsl:template>
  117.   <xsl:template match="job">
  118.   <xsl:value-of select="date" />
  119.   :
  120.   <xsl:value-of select="employer" />
  121.   <br />
  122.   <xsl:value-of select="description" />
  123.   <xsl:if test="subject">
  124.   <!--  s'il le job possede un sujet alors c'est un stage
  125.   -->
  126.   <br />
  127.   subject:
  128.   <xsl:value-of select="subject" />
  129.   </xsl:if>
  130.   <br />
  131.   <br />
  132.   </xsl:template>
  133.   <!-- foreign_language
  134.   -->
  135.   <xsl:template match="foreign_language">
  136.   <h2>Languages</h2>
  137.   <p>
  138.   <xsl:apply-templates select="language" />
  139.   </p>
  140.   </xsl:template>
  141.   <xsl:template match="language">
  142.   <xsl:value-of select="name" />
  143.   :
  144.   <xsl:value-of select="level" />
  145.   <br />
  146.   <br />
  147.   </xsl:template>
  148.   <!-- extracurricular_activities
  149.   -->
  150.   <xsl:template match="extracurricular_activities">
  151.   <h2>Extracurricular Activities</h2>
  152.   <p>
  153.   <xsl:apply-templates select="category" />
  154.   </p>
  155.   </xsl:template>
  156.   <xsl:template match="category">
  157.   <xsl:value-of select="name" />
  158.   :
  159.   <xsl:apply-templates select="activity" />
  160.   <br />
  161.   <br />
  162.   </xsl:template>
  163.   </xsl:stylesheet>


 
Ce n'est pas un exemple de "toute beauté" mais ca te servira peut etre pour la definition et l'appel des regles.
 
Si tu souhaites voir le resultat : http://dauvergne.sebastien.free.fr
 
Le resultat graphique en lui-même est loin d'être fulgurant mais ce qu'il faut noté c'est la puissance des règles pour aller chercher les données nécessaires dans le document XML.

Reply

Sujets relatifs:

Leave a Replay

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