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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  [XML]-[XSL] tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[XML]-[XSL] tableau

n°1146778
tofita_49
Posté le 11-07-2005 à 17:35:24  profilanswer
 

Bonjour,
je débute en xsl/xml
 
j'ai un fichier xml du genre
code:
<file>
      <file1 ext="bin" date="11 juillet"/>
      <file2 ext="doc" date="11 juillet"/>
      <file3 ext="toto" date="11 juillet"/>
</file>
 
J'aimerai créé un tableau avec 3 colonnes (file , ext, date)
Jy arrive mais le probleme est que le nombre de file (file1, file2,...)
dépend du fichier XML.(je voudrais créer un fichier XSL générique)
 
Quelqu'un peut m'aider.
merci

mood
Publicité
Posté le 11-07-2005 à 17:35:24  profilanswer
 

n°1147969
avander
Posté le 12-07-2005 à 15:14:28  profilanswer
 

Faut générer les lignes de ton tableau dans un template qui sera appliqué pour chaque element qui dispose d'un attribut ext et date... c'est une expression xpath relativement simple à faire il me semble.


Message édité par avander le 12-07-2005 à 15:15:02
n°1147973
FlorentG
Posté le 12-07-2005 à 15:15:37  profilanswer
 

A mon avis, c'est une grave erreur d'avoir des file1 file2 file3 :/
J'aurais plutôt mis :

<files>
  <file id="1">
    <ext>bin</ext>
    <date>11 juillet</date>
  </file>
</files>

n°1148060
tofita_49
Posté le 12-07-2005 à 15:52:38  profilanswer
 

Oui mais la composition du fichier XML est arbitraire.
Je ne peux pas changer le fichier XML.

n°1148067
FlorentG
Posté le 12-07-2005 à 15:55:10  profilanswer
 

Ah mince... C'est qui qui l'a fait qu'on le frappe ? :D

n°1148893
avander
Posté le 13-07-2005 à 11:54:54  profilanswer
 

Effectivement le coup du file1, file2, file3 c'est pas terrible... mais on peut s'en sortir!
 

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<root>
<file>
      <file1 ext="bin" date="11 juillet"/>
      <file2 ext="doc" date="12 juillet"/>
      <file3 ext="toto" date="13 juillet"/>
</file>
</root>
<!-- eof -->


 

<?xml version="1.0" encoding="ISO-8859-1"?>
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
  <xsl:output
    method="xml" omit-xml-declaration="yes" indent="yes" encoding="ISO-8859-1"
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
 
<xsl:template match="/">
  <html>
   <head />
   <body>
 
     <xsl:apply-templates />
   </body>
  </html>
</xsl:template>  
 
<xsl:template match="file">
  <h1>mon zoli tableau</h1>
  <table border="1">
    <tr><th>file</th><th>pos</th><th>ext</th><th>date</th></tr>
     
    <xsl:apply-templates />
  </table>
</xsl:template>  
 
<xsl:template match="*[@ext][@date]">
  <tr>
    <td><xsl:value-of select="name()" /></td>
    <td><xsl:value-of select="position()" /></td>
    <td><xsl:value-of select="@ext" /></td>
    <td><xsl:value-of select="@date" /></td>
  </tr>
</xsl:template>  
 
</xsl:stylesheet>  
<!-- eof -->


 
et le résultat ( en version texte only)

mon zoli tableau
file pos ext date
file1  2  bin  11 juillet
file2  4  doc  12 juillet
file3  6  toto  13 juillet


 
maintenant si quelqu'un voit pourquoi position() retourne la position relative * 2, je suis preneur...


Message édité par avander le 13-07-2005 à 11:56:36
n°1148901
FlorentG
Posté le 13-07-2005 à 11:57:37  profilanswer
 

J'aurais fait ça un peu différemment ;)

n°1148902
FlorentG
Posté le 13-07-2005 à 11:57:42  profilanswer
 

2 sec

n°1148920
avander
Posté le 13-07-2005 à 12:07:39  profilanswer
 


alors?  :whistle:

n°1148928
FlorentG
Posté le 13-07-2005 à 12:11:44  profilanswer
 

Du calme, du calme :D

mood
Publicité
Posté le 13-07-2005 à 12:11:44  profilanswer
 

n°1148937
FlorentG
Posté le 13-07-2005 à 12:21:38  profilanswer
 

Bon, si <file> ne contient que des file1, file2, etc. (sinon j'ai aussi la solution pour s'assurer que c'est un filexxx) :

<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <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" />
  <xsl:template match="file">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
   <head>
    <title>Tableau file</title>
   </head>
      <body>
        <table border="3">
          <thead>
            <tr>
              <tr><th>file</th><th>pos</th><th>ext</th><th>date</th></tr>
            </tr>
          </thead>
          <tbody>
            <xsl:for-each select="*">
              <tr>
                <td><xsl:value-of select="name()" /></td>
                <td><xsl:value-of select="position()" /></td>
                <td><xsl:value-of select="@ext" /></td>
                <td><xsl:value-of select="@date" /></td>
              </tr>
            </xsl:for-each>
          </tbody>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:transform>


Bon j'ai pas tout templatisé à mort, maispagrave :D

n°1149067
avander
Posté le 13-07-2005 à 14:22:50  profilanswer
 

belle illustration d'un article très intéressant sur le style push et pull d'un stylesheet sur www.xml.com
 
ma solution: push style
ta solution: pull style
 
 ;)

n°1149073
FlorentG
Posté le 13-07-2005 à 14:26:23  profilanswer
 

:)
 
Sinon, autre version :

<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <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" />
  <xsl:template match="file">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
   <head>
    <title>Tableau file</title>
   </head>
      <body>
        <table border="3">
          <thead>
            <tr>
              <tr><th>file</th><th>pos</th><th>ext</th><th>date</th></tr>
            </tr>
          </thead>
          <tbody>
            <xsl:apply-templates />
          </tbody>
        </table>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="file/*[starts-with(name(),'file')]">
    <tr>
      <td><xsl:value-of select="name()" /></td>
      <td><xsl:value-of select="position()" /></td>
      <td><xsl:value-of select="@ext" /></td>
      <td><xsl:value-of select="@date" /></td>
    </tr>
  </xsl:template>
</xsl:transform>

n°1149089
avander
Posté le 13-07-2005 à 14:34:03  profilanswer
 

Je préfere la 2ième... for-each spa beau... une idée pour l'histoire de position() qui n'était pas demandé mais ça m'intrigue...
 
j'ai essayé avec  

<xsl:template match="*[@ext and @date]">

mais c'est pareil, il doit sélectionner autre chose mais je vois pas...


Message édité par avander le 13-07-2005 à 14:36:51

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

  [XML]-[XSL] tableau

 

Sujets relatifs
tri d'un tableauXML DTD avec Firefox
txt ou csv en XMLDoublon dans un tableau d'objet
Document Word dans une cellule d'un tableau HTMLRécupérer dynamiquement le schéma associé à un fichier XML
[cygwin/c++/xerces]accéder a un fichier XML sur le web?Tableau récapitulatif multi-requêtes sous Access
tableaux php=>tableau javascript[XML XSL] Gestion de tableau
Plus de sujets relatifs à : [XML]-[XSL] tableau


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