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]tableau double entrée avec cellule manquante


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Points : 22
    Points
    22
    Par défaut [XSLT]tableau double entrée avec cellule manquante
    Bonjour, je tourne en rond sur un problème depuis un bon moment

    j'ai un flux xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <depenses>
    <depenses_row>
      <nature>degradations</nature> 
      <annee>2001</annee> 
      <valdepense>58</valdepense> 
    </depenses_row>
    <depenses_row">
      <nature>portier</nature> 
      <annee>2002</annee> 
      <valdepense>200</valdepense> 
    </depenses_row>
    <depenses>
    et je veux transformer cela en un tableau html à double entrée vias xsl


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    |*********** | 2001 | 2002 |
    |Dégradation | 58   |      |
    |portier     |      | 200  |

    si la matrice était pleine, aucun problème mais comme vous le voyez il y a des cellules vides dans le tableau qui correspondent à des valeurs absentes dans le flux XML. Je ne vois pas comment provoquer l'affichage de ces cellules vides sur une absence de données ?

    Merci pour vos réponses ou un liens sur un problème similaire

  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,

    est-ce que le nombre d'années est fixe ou peut varier ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre à l'essai

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Points : 22
    Points
    22
    Par défaut Précision
    Pour nos essais nous sommes partis sur le postula que le nombre d'année était fixe et si j'avais une solution pour cela je serais déjà très content.

    Dans l'absolue nous aimerions trouver une transformation xsl indépendante du nombre de valeur que peut prendre les entêtes du tableau à double entrée.

    En effet nous utilisons déjà des transformations xsl sur des flux xml extraits de base de données décisionnel (dataware, datamart) pour générer de simples tableaux. La séparation entre extraction des données et mise en forme pour l'affichage dans un browser est vraiment sympa avec XML/XSL. Aujourd'hui nous souhaitons aller plus loin en créant des tableaux à doubles entrée. Dans les flux XML issu de nos datamarts le nombre de valeur des axes d'analyse (entête du tableau à double entrée) n'est pas forcément prévisible et souvent il n'y a pas d'enregistrement pour certaines valeurs des axes comme l'illustre mon exemple.

  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
    Comme se décrit dans ton fichier XML une nature ("portier" par exemple) ayant une valeur pour chaque colonne (année) ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre à l'essai

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Points : 22
    Points
    22
    Par défaut précision sur flux
    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
     
    <depenses> 
    <depenses_row> 
      <nature>degradations</nature> 
      <annee>2001</annee> 
      <valdepense>58</valdepense> 
    </depenses_row> 
    <depenses_row"> 
      <nature>portier</nature> 
      <annee>2001</annee> 
      <valdepense>150</valdepense> 
    </depenses_row> 
    <depenses_row"> 
      <nature>portier</nature> 
      <annee>2002</annee> 
      <valdepense>200</valdepense> 
    </depenses_row> 
    <depenses>
    Sur cet exemple pas de cellule manquante pour portier. Nous avons aussi classé pour une nature donnée les années par ordre croissant.

  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
    Voici une solution possible :
    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
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    	<xsl:output method="html" encoding="ISO-8859-1"/>
     
    	<xsl:key name="annees" match="annee" use="."/>
    	<xsl:key name="natures" match="nature" use="."/>
     
    	<xsl:template match="/depenses">
    		<table border="1">
    			<!-- Génération de la ligne d'en-tête -->
    			<tr>
    				<td>Natures</td>
    				<xsl:for-each select="/depenses/depenses_row/annee[generate-id(.) = generate-id(key('annees',.)[1])]">
    					<td><xsl:value-of select="."/></td>
    				</xsl:for-each>
    			</tr>
    			<!-- Génération des lignes de nature -->
    			<xsl:for-each select="depenses_row/nature[generate-id(.) = generate-id(key('natures',.)[1])]">
    				<xsl:variable name="var-nature" select="."/>
    				<tr>
    					<td><xsl:value-of select="."/></td>
    					<xsl:for-each select="/depenses/depenses_row/annee[generate-id(.) = generate-id(key('annees',.)[1])]">
    						<td><xsl:value-of select="/depenses/depenses_row[annee = current() and nature = $var-nature]/valdepense"/></td>
    					</xsl:for-each>
    				</tr>
    			</xsl:for-each>
    		</table>
    	</xsl:template>
     
     
    </xsl:stylesheet>
    Elle est particulièrement peu efficace (ça peut poser problème avec de gros flux XML) mais elle fonctionne.
    Elle est basée sur le principe de la méthode Muench, qui permet de regrouper les données.

    [EDIT] J'avais oublié les <tr> autour de la ligne d'en-tête... [/EDIT]
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  7. #7
    Membre à l'essai

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Points : 22
    Points
    22
    Par défaut [résolu]Merci
    Merci beaucoup pour ton précieux exemple et ta réactivité.

  8. #8
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Bonjour, je me permets de m'incruster pour poser une petite question, GrandFather, tu dis :
    Elle est particulièrement peu efficace (ça peut poser problème avec de gros flux XML) mais elle fonctionne.
    Pourquoi cette méthode est-elle peu efficace et dans l'absolu, existerait-il une solution efficace, je n'ose demander laquelle mais déjà si elle existe.

    Merci.

  9. #9
    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
    Citation Envoyé par WebPac
    Pourquoi cette méthode est-elle peu efficace et dans l'absolu, existerait-il une solution efficace, je n'ose demander laquelle mais déjà si elle existe.
    Elle est peu efficace car elle impose à chaque itération (chaque ligne) de nombreux parcours complets de l'arbre XML. En fait, il s'agit d'une sorte de crible, alors qu'on préfèrera un parcours séquentiel de l'arbre XML par la feuille de style.

    Dans l'idéal, le tableau devrait être réparti par lignes dans le XML, avec une valeur (même vide) pour chaque colonne du tableau entier. La feuille de style devient alors triviale. Ce format XML est moins compact que celui présenté, mais le traitement en est facilité.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  10. #10
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Merci pour la réponse, je comprends.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. formulaire avec tableau à double entrée
    Par dmalik dans le forum Services
    Réponses: 1
    Dernier message: 02/07/2013, 21h49
  2. [AC-2003] Tableau Double entrées avec case à cocher
    Par meud007 dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/05/2012, 21h40
  3. PB controle formulaire avec tableau à double entrées
    Par Poutchou dans le forum Général JavaScript
    Réponses: 36
    Dernier message: 23/03/2006, 14h37
  4. tableau double entrée et requete sql
    Par oceane751 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 29/11/2005, 14h25
  5. tableau double entrée
    Par Andrey dans le forum C
    Réponses: 16
    Dernier message: 08/11/2005, 15h33

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