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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  [XSL] Générer un tableau dynamique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[XSL] Générer un tableau dynamique

n°1576974
tafkap
Posté le 19-06-2007 à 18:23:30  profilanswer
 

Me revoilà   :hello:  
 
J'aimerais donc générer un tableau HTML dynamiquement à partir de mon fichier XML qui est de la forme :
 

Code :
  1. <employee>
  2.   <note>2</note>
  3.   <tauxObj>60.00</tauxObj>
  4.   <midpointOld>0 EUR</midpointOld>
  5.   <comparatioOld>0.0000</comparatioOld>
  6.   <salref>70000.00</salref>
  7.   <salconv />
  8.   <midpoint>0 EUR</midpoint>
  9.   <comparatio>0.0000</comparatio>
  10.   </employee>


 
Je souhaite avoir systématiquement 4 colonnes en revanche le nombre de ligne est illimité. Une ligne du tableau doit ressembler à ceci :
 
Titre1 Data1 Titre2 Data2
...
 
Quand un élément XML est à vide je ne souhaite pas afficher la donnée (comme "salconv" dans mon exemple) et c'est bien là mon soucis : je peux avoir un nombre impaire de données à afficher.
 
Si j'ai 5 éléments j'aurais donc le tableau suivant :
 
Titre1 Data1 Titre2 Data2
Titre3 Data3 Titre4 Data4
Titre5 Data5
 
Merci pour votre aide  ;)

mood
Publicité
Posté le 19-06-2007 à 18:23:30  profilanswer
 

n°1597517
rt-box
Posté le 09-08-2007 à 01:45:20  profilanswer
 

Je me permets d'upper ce post un peu vieux car j'ai moi aussi un problème similaire, en un peu plus simple.
A partir d'un XML du style:

Code :
  1. <links>
  2.   <link> (...) </link>
  3.   <link> (...) </link>
  4.   <link> (...) </link>
  5.   <link> (...) </link>
  6.   <link> (...) </link>
  7.   (...)
  8. </links>


j'aimerais générer un tableau à deux colonnes du style:

Code :
  1. <table>
  2. <tr><td>Contenu du Link1</td><td>Contenu du Link2</td></tr>
  3. <tr><td>Contenu du Link3</td><td>Contenu du Link4</td></tr>
  4. (...)
  5. <tr><td>Contenu du LinkN</td><td>&nbsp;</td></tr>
  6. </table>


en tenant compte du fait qu'il peut y avoir un nombre impair de liens, comme c'est le cas dans l'exemple.
Je pensais avoir la solution avec le code suivant, mais ça ne fonctionne pas car le parser interprète aussi les balises non-XSL.

Code :
  1. <xsl:template match="link">
  2. <xsl:if test="position() mod 2 = 1"><tr></xsl:if>
  3.   <td><b><xsl:value-of select="./title" /></b><br/>
  4.   <xsl:element name="a"><xsl:attribute name="href">http://<xsl:value-of select="./url" /></xsl:attribute><xsl:value-of select="./url" /></xsl:element>
  5.   </td>
  6. <xsl:if test="position() mod 2 = 0"></tr></xsl:if>
  7. <xsl:if test="(position() = last()) and (position() mod 2 = 1)"><td>&nbsp;</td></tr></xsl:if>
  8. </xsl:template>


Ligne 2, le parser ne trouve pas le </tr> qui devrait fermer le <tr> avant le </xsl:if> ...
 
Quelqu'un a-t-il une solution ?
 
Merci d'avance !

n°1597524
TheRom_S
Posté le 09-08-2007 à 04:28:19  profilanswer
 

Ben c'est pas très compliqué, faut juste comprendre ce qui foire et avoir des idées.
 
Là typiquement, ton doc XSL est pas valide parce qu'il est pas XML-compliant, j'en veux pour preuve ceci :

Code :
  1. <xsl:if test="position() mod 2 = 1"><tr></xsl:if>

l'élément <tr> n'est pas fermé et c'est pareil plus loin. Tu as déjà de la chance d'avoir un résultat (quoique ça n'aide pas à voir l'erreur)
 
Donc l'idée c'est que puisque tu vas être obligé de traiter 2 groupes <td> à la fois, il faut aller chercher le suivant, sous condition, avec XQuery/XPath. Au passage j'utilise un paramètre pour mémoriser la position actuelle.
 
Regardes mon exemple
test.xml

Code :
  1. <?xml version="1.0"?>
  2. <root>
  3. <el>yop1</el>
  4. <el>yop2</el>
  5. <el>yop3</el>
  6. <el>yop4</el>
  7. <el>yop5</el>
  8. <el>yop6</el>
  9. <el>yop7</el>
  10. </root>

test.xsl

Code :
  1. <?xml version="1.0" encoding="ISO-8859-15"?>
  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" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" media-type="te
  4. xt/html" indent="yes" />
  5. <xsl:template match="root">
  6.   <html>
  7.    <head>
  8.     <title>Test XSL</title>
  9.     <link rel="stylesheet" type="text/css" href="style.css" />
  10.    </head>
  11.    <body>
  12.     <table>
  13.      <xsl:apply-templates select="el" />
  14.     </table>
  15.    </body>
  16.   </html>
  17. </xsl:template>
  18. <xsl:template match="el">
  19.   <xsl:if test="position() mod 2 = 1">
  20.    <tr>
  21.     <td><xsl:value-of select="." /></td>
  22.     <xsl:if test="position() = last()"><td>&#160;</td></xsl:if>
  23.     <xsl:if test="position() != last()">
  24.      <xsl:param name="pos" select="position() + 1" />
  25.      <td>
  26.       <xsl:value-of select="../el[position() = $pos]" />
  27.      </td>
  28.     </xsl:if>
  29.    </tr>
  30.   </xsl:if>
  31. </xsl:template>
  32. </xsl:stylesheet>

au fait "&nbsp;" n'est pas une entité XSL-T valide, il faut utiliser "&#360;". C'est moche mais les entités XHTML ne sont pas connues par XSL-T, je crois qu'il y a un moyen de les importer mais je sais plus comment.


---------------
The Rom's, à votre service
n°1597548
rufo
Pas me confondre avec Lycos!
Posté le 09-08-2007 à 09:20:33  profilanswer
 

tiens, je connaissais pas &#360; pour &nbsp;. Moi, j'utilise &#160;
C'est quoi la différence?

n°1597776
TheRom_S
Posté le 09-08-2007 à 16:15:58  profilanswer
 

la différence c'est une erreur de frappe :sol:


---------------
The Rom's, à votre service
n°1597832
rufo
Pas me confondre avec Lycos!
Posté le 09-08-2007 à 16:49:46  profilanswer
 

ça m'a effleuré l'esprit, cette éventualité :D

n°1598010
rt-box
Posté le 10-08-2007 à 01:31:58  profilanswer
 

Merci beaucoup pour vos explications :)


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

  [XSL] Générer un tableau dynamique

 

Sujets relatifs
Défilement d'un fichier texte dynamique de gauche à droitemenu vertical dynamique
[wxWidgets] Générer un évênement avec wxControl::CommandParamètre dans un tableau
Insertion dynamique d'une ligne de tableauPb réaffichage formulaire dynamique
Supprimer un element d'un tableau multidimentionnelle js [Resolu]Comment créer dynamiquement un tableau HTML dans un script VBS ?
Comment gérer un formulaire dynamique de recherche 
Plus de sujets relatifs à : [XSL] Générer un tableau dynamique


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