Matcher un nombre inconnu d'arguments[Résolu]

Matcher un nombre inconnu d'arguments[Résolu] - XML/XSL - Programmation

Marsh Posté le 04-03-2006 à 14:05:49    

Bonjour,
 
Je suis entrain de faire un petit CMS et j'ai décidé de me mettre dans le bain du traitement par XSL, ce qui m'a l'air très pratique mais pour le moment un peu dur.
Enfait grace a un script php je sors un listing de ce type :  
 

Code :
  1. <?xml version='1.0'?>
  2. <page>
  3. <head>
  4.   <title value='Administration des utilisateurs' />
  5. </head>
  6. <body>
  7. <table>
  8.   <headers>
  9.     <header name="id"/>
  10.     <header name="login"/>
  11.     <header name="Nom"/>
  12.     <header name="Prenom"/>
  13.     <header name="Email"/>
  14.     <header name="Societe"/>
  15.     <header name="Adresse"/>
  16.     <header name="Pays"/>
  17.     <header name="Phone"/>
  18.     <header name="ip"/>
  19.     <header name="date"/>
  20.     <header name="active"/>
  21.   </headers>
  22.   <item id="1" login="user1" Nom="Esox" Prenom="esox" Email="esox_ch@email.com" Societe="" Adresse=""  Pays="suisse" Phone="" ip="80.218.33.234" date="2004-12-21 10:50:26" active="y" />
  23. </table>
  24. </body>
  25. </page>


 
Où le nombre de header n'est pas connu d'avance (ni bien entendu la valeur de leur attribut). Je voudrais générer un tableau avec (les headers deviendront les th et les item deviendront les <td> ).
 
J'ai écrit un petite template XSLT mais apperemment je dois avoir loupé une (ou plusieurs étapes), pouvez vous me re-mettre sur la voie ?  
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
  3. <xsl:output method="xml" encoding="UTF-8" ident="yes" doctype-public='-//W3C//DTD XHTML 1.0 Strict//EN' doctype-system ='http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'/>
  4. <xsl:template match="/">
  5. <html xml:lang="fr" lang="fr">
  6. <head>
  7.    <xsl:apply-templates select="head" />
  8. </head>
  9. <body>
  10. <h1> Administration des utilisateurs </h1>
  11. <xsl:apply-templates select="table" />
  12. </body>
  13. </html>
  14. </xsl:template>
  15. <xsl:template match="head">
  16. <title><xsl:value-of select="title/@value"/></title>
  17. </xsl:template>
  18. <xsl:template match="table">
  19. <table border="1" summary="Liste des utilisateurs">
  20. <tr>
  21. <xsl:apply-templates select="headers/header" />
  22. </tr>
  23. <xsl:apply-templates select="items" />
  24. </table>
  25. </xsl:template>
  26. <xsl:template match="header">
  27.   <th><xsl:value-of select="@name" /></th>
  28. </xsl:template>
  29. <xsl:template match="items">
  30. <tr>
  31. <xsl:apply-templates select="item/@*" />
  32. </tr>
  33. </xsl:template>
  34. <xsl:template match="item/@*" />
  35. <td><xsl:value-of select="." /></td>
  36. </xsl:template>
  37. </xsl:stylesheet>


 
Merci d'avance
 
Esox_ch


Message édité par esox_ch le 05-03-2006 à 20:07:13

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-03-2006 à 14:05:49   

Reply

Marsh Posté le 05-03-2006 à 01:04:35    

up


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-03-2006 à 17:10:14    

re up ..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-03-2006 à 19:40:40    

Problème auto-resolu apres 1 jour de triturage ... J'en était pas si loin que ça :D Mais ça m'a permis aussi de bien comprendre où je foirais.  
Bien entendu tous commentaires / remarques sont bien venus
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
  3. <xsl:output method="xml" encoding="UTF-8" ident="yes" doctype-public='-//W3C//DTD XHTML 1.0 Strict//EN' doctype-system ='http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'/>
  4. <xsl:template match="/">
  5. <html xml:lang="fr" lang="fr">
  6. <head>
  7.    <xsl:apply-templates select="/page/head"/>
  8. </head>
  9. <body>
  10. <h1> Administration des utilisateurs </h1>
  11. <xsl:apply-templates select="/page/body"/>
  12. </body>
  13. </html>
  14. </xsl:template>
  15. <xsl:template match="head">
  16. <title><xsl:value-of select="title/@value"/></title>
  17. </xsl:template>
  18. <xsl:template match="table">
  19. <table border="1" summary="Liste des utilisateurs">
  20. <tr>
  21. <xsl:apply-templates select="headers/header" />
  22. </tr>
  23. <xsl:apply-templates select="items" />
  24. </table>
  25. </xsl:template>
  26. <xsl:template match="header">
  27.   <th><xsl:value-of select="@name" /></th>
  28. </xsl:template>
  29. <xsl:template match="item">
  30. <tr>
  31. <xsl:apply-templates select="./@*" />
  32. </tr>
  33. </xsl:template>
  34. <xsl:template match="item/@*">
  35. <td><xsl:value-of select="."/></td>
  36. </xsl:template>
  37. </xsl:stylesheet>


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-03-2006 à 11:35:30    

pas mal... et sans for-each en plus!  :whistle:

Reply

Marsh Posté le 06-03-2006 à 13:24:48    

Au debut j'en avais dans tous les sens ...
Apres, en cherchant a droite et a gauche je suis tombé sur un post qui expliquait qu'il vaut mieux utiliser le moins de for-each possible ... Alors voila ...  
Et le resultat est pas mal, maintenant ma template c'est pas mal alourdie a cause de plusieurs blocs choose et if mais ça me semble toujours plus "leger" que si j'avais fait le gros template / avec 8 foreach a la suite :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

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