IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] Créer un tableau à partir de sa description [Sources]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut [XSLT] Créer un tableau à partir de sa description
    Bonjour,

    Je suis largement débutant en xml/xls et j'ai un 'gros' souci que j'explique ici :
    J'ai un tableau stocké en xml sous ce format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Table>
    <NbLignes>3</NbLignes>
    <NbColonnes>2</NbColonnes>
    <Valeurs>12 50 152 25 157 45</Valeurs>
    </Table>
    et j'aimerai que cela soit affiché sous forme de tableau grâce à mon piti fichier xsl.

    Problème :

    Le stockage des valeurs n'est pas sous format table, mais sous format vecteur de dimension NbLignes * NbColonnes...
    Comment faire pour différencier les lignes et les colonnes en xsl ?

    Merci à vous, ô grands maitres du xsl :D

    Sky.

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    il est effectivement possible avec XSLT de créer un tableau (au format HTML je suppose ?) à partir du Schema que tu exposes, mais ce n'est pas de la tarte...

    Ce genre de structure est délicate à manipuler avec XSLT, car elle nécessite pas mal de traitements récursifs et de manipulations de chaînes. Comme le démontre le code qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    	<xsl:template match="/Table">
    		<table>
    			<xsl:call-template name="ligne">
    				<xsl:with-param name="nbLignes" select="NbLignes"/>
    				<xsl:with-param name="nbColonnes" select="NbColonnes"/>
    				<xsl:with-param name="valeurs" select="concat(Valeurs, ' ')"/>
    			</xsl:call-template>
    		</table>
    	</xsl:template>
     
    	<xsl:template name="ligne">
    		<xsl:param name="nbLignes"/>
    		<xsl:param name="nbColonnes"/>
    		<xsl:param name="valeurs"/>
    		<xsl:variable name="valeurs-ligne">
    			<xsl:call-template name="extraction-valeurs-ligne">
    				<xsl:with-param name="valeurs-tableau" select="$valeurs"/>
    				<xsl:with-param name="nbValeurs" select="$nbColonnes"/>
    			</xsl:call-template>
    		</xsl:variable>
    		<xsl:if test="$nbLignes &gt; 0">
    			<ligne>
    				<xsl:call-template name="colonne">
    					<xsl:with-param name="nbColonnes" select="$nbColonnes"/>
    					<xsl:with-param name="valeurs" select="concat(normalize-space($valeurs-ligne), ' ')"/>
    				</xsl:call-template>	
    			</ligne>
    			<xsl:call-template name="ligne">
    				<xsl:with-param name="nbLignes" select="$nbLignes - 1"/>
    				<xsl:with-param name="nbColonnes" select="$nbColonnes"/>
    				<xsl:with-param name="valeurs" select="substring-after($valeurs, concat(normalize-space($valeurs-ligne), ' '))"/>
    			</xsl:call-template>
    		</xsl:if>
    	</xsl:template>
     
    	<xsl:template name="colonne">
    		<xsl:param name="nbColonnes"/>
    		<xsl:param name="valeurs"/>
    		<xsl:if test="$nbColonnes &gt; 0">
    			<colonne>
    				<xsl:value-of select="substring-before($valeurs, ' ')"/>
    			</colonne>
    			<xsl:call-template name="colonne">
    				<xsl:with-param name="nbColonnes" select="$nbColonnes - 1"/>
    				<xsl:with-param name="valeurs" select="substring-after($valeurs, ' ')"/>
    			</xsl:call-template>
    		</xsl:if>
    	</xsl:template>
     
    	<xsl:template name="extraction-valeurs-ligne">
    		<xsl:param name="valeurs-tableau"/>
    		<xsl:param name="nbValeurs"/>
    		<xsl:param name="valeurs-ligne" select="''"/>
    		<xsl:choose>
    			<xsl:when test="$nbValeurs &gt; 0">
    				<xsl:call-template name="extraction-valeurs-ligne">
    					<xsl:with-param name="valeurs-tableau" select="substring-after($valeurs-tableau, ' ')"/>
    					<xsl:with-param name="nbValeurs" select="$nbValeurs - 1"/>
    					<xsl:with-param name="valeurs-ligne" select="concat($valeurs-ligne, substring-before($valeurs-tableau, ' '), ' ')"/>
    				</xsl:call-template>
    			</xsl:when>
    			<xsl:otherwise>
    				<xsl:value-of select="$valeurs-ligne"/>
    			</xsl:otherwise>
    		</xsl:choose>		
    	</xsl:template>
     
    </xsl:stylesheet>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut Merci
    Merci bien, GrandFather, pour cette réponse où l'expérience transpire derrière chaque ligne de code ;c)

    C'était bien un tableau au format html, merci d'avoir bien interprété :c)

    Un problème, cependant : le code transmis appliqué une bête table ne sort que la première ligne de cette table...

    J'ai essayé de trouver d'où venait ce problème en vain...

    Alors si tu as qques minutes à perdre, je t'en serais très, mais alors très reconnaissant (et mon client aussi, en passant :c) )

    Bonne journée, bon WE et bonne continuation !

    G.

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Voila qui est étonnant, j'ai testé ce code avec la Table que tu as donnée en exemple...

    Avec quoi fais-tu ta transformation ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut Toujours la table
    Bonjour,
    Avec quoi je fais ma transfo ? Bah que j'ouvre le fichier xml avec Internet Explorer ou FireFox, le résultat est le même...
    Soit la première ligne seulement, soit l'ensemble des données sur une seule ligne, sans trace de tableau...
    Aurais-je fait une erreur qque part dans mon en-tête de fichier xml ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml-stylesheet type="text/xsl" href="test.xsl"?>
    <Table>
    <NbLignes>2</NbLignes>
    <NbColonnes>3</NbColonnes>
    <Valeurs>12 50 152 25 157 45</Valeurs>
    </Table>
    Merci

  6. #6
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    C'est normal.

    Dans mon XSLT, j'ai utilisé des balises <ligne> et <colonne> qui ne sont évidemment pas des balises HTML. Remplace <ligne> par <tr> et <colonne> par <td>, place les balises <html> et <body> et ça devrait mieux fonctionner...

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/03/2008, 15h41
  2. Réponses: 2
    Dernier message: 08/03/2008, 17h50
  3. [XSLT] Créer un tableau HTML en fixant le nombre de cases par ligne
    Par kingmandrax dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 03/07/2006, 16h07
  4. Créer un tableau à partir d'un autre tableau
    Par mariemor64 dans le forum ASP
    Réponses: 5
    Dernier message: 20/06/2006, 14h50
  5. [Excel] Créer un tableau à partir d'un autre
    Par Ouguiya dans le forum Excel
    Réponses: 3
    Dernier message: 30/03/2006, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo