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] Afficher une seule fois les attributs redondants...


Sujet :

XSL/XSLT/XPATH XML

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut [XSLT] Afficher une seule fois les attributs redondants...
    Bonjour!

    Voila, après toutes mes ptites questions, j'ai enfin réussi à obtenir ce que je voulais, seulement il semblre que ce n'est pas ce que l'on me demandait exactement... Donc en gros, au lieu de réaliser une présentation en treeview classique avec les élements se dépliant ainsi que leurs attributs respectifs, je dois passer à une mise en forme en tableau avec en entête de colonne les noms des attributs, en entrée de ligne les éléments et avec la valeur de l'attribut à l'intersection d'un nom d'élement et d'un nom d'attribut...( j'espère que j'ai été clair... )
    Bref, non seulement je ne sais pas du tout comment faire cela car il me semble que je devrais faire plusieurs parcours pour prendre une première fois les attributs, puis une seconde fois les valeurs des attributs, etc...

    Donc, je me suis dit que j'allais commencer par réaliser déja ce que je voulais en faisant la première partie dynamique (récolter les noms des attributs pour les entêtes des colonnes)

    Seulement voila, j'ai un premirer problème parce que comme je ne dois pas avoir d'entête de colonne redondant d'affiché, je fais une régle pour le premier entête que je rencontre s'il y en a un autre, alors je le saute...
    voila a quoi ressemble mon xsl:
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    <xsl:template match="/*"> 
        <html>
         <style type="text/css">
          .entete { background-color:#FFFFFF; font-family: Verdana; font-size: 7pt; color:#851D1C;} 
          .ligne1 { background-color:#FFFFFF; font-family: Verdana; font-size: 7pt; cursor:pointer; color:#537DB9;} 
          .ligne2 { background-color:#EEEEEE; font-style:blod;font-family: Verdana; font-size: 7pt; color:#537DB9; cursor:pointer;} 
          .ligne3 { background-color:#FFFFFF; font-style:blod;font-family: Verdana; font-size: 7pt; color:#537DB9;} 
          .vide { color:#FFFFFF;}
         </style>
     
         <script language="javascript" src="./affichage2.js"></script>
          <body>
            <table width="70%" align="center" border="1" >
              <tr border="1">
              <xsl:for-each select="@*">
              <xsl:variable name="le_nom"><xsl:choose> 
    	  <xsl:when test="name()='oa_id_message'">#</xsl:when>
    	  </xsl:choose></xsl:variable>
     
              <th class="vide">_________</th>                                                      
              <th class="entete" border="1">
             <b><xsl:value-of select="string($le_nom)"/></b>
              </th>
     
              </xsl:for-each> 
               <xsl:apply-templates select="*"/>
              </tr>
              <tr style="display:block">
              	<td name="td1" class="ligne1" onclick="javascript:affiche_cache(this);" ><img name="signe_principal" src="./images/plus.gif" /> Message</td><td>1  </td><td>/ </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td><td>/  </td>
              </tr>
              <tr name="tr_secondaire"  style="display:none">
              	<td name="secondaire" class="ligne2" onclick="javascript:affiche_cache(this);" >...<xsl:text> </xsl:text><img name="signe" src="./images/plus.gif" /> Process</td><td>1  </td>
              </tr>
              <tr name="tr_final" style="display:none">
              	<td class="ligne3" >...... Origin Site</td><td>1  </td>
              </tr>
              <tr name="tr_final" style="display:none">
              	<td class="ligne3" >...... Target Site</td><td>1  </td>
              </tr>
              <tr name="tr_final" style="display:none">
              	<td class="ligne3" >...... Step</td><td>1  </td>
              </tr>
              <tr name="tr_final" style="display:none">
              	<td class="ligne3" >...... Business Object</td><td>1  </td>
              </tr>
     
            </table>   
          </body>
        </html>
      </xsl:template>
     
     
      <xsl:template match="*">
        <xsl:choose>
          <xsl:when test="*"> 
     
     
        	<xsl:for-each select="@*">
              <xsl:variable name="le_nom2"><xsl:choose> 
    	  <xsl:when test="name()='oa_nom_processus'">Name</xsl:when>
              <xsl:when test="name()='oa_date_heure_gmt_deb_processus'">Start Time</xsl:when>
              <xsl:when test="name()='oa_date_heure_gmt_fin_processus'">End Time</xsl:when>
    	  <xsl:when test="name()='oa_code_retour_processus'">Return Code</xsl:when>
    	  </xsl:choose></xsl:variable>
     
              <th class="entete">
              <b><xsl:value-of select="string($le_nom2)"/></b>
              </th>
            </xsl:for-each>	
        	<xsl:apply-templates select="*"/>
         </xsl:when>
     
         <xsl:otherwise>
            <xsl:for-each select="@*">
                        <xsl:variable name="le_nom3"><xsl:choose> 
    		    <xsl:when test="name()='oa_adresse_physique_origine'">Physical Address</xsl:when>
    		    <xsl:when test="name()='oa_designation_objet_metier'">Designation</xsl:when>
    		    </xsl:choose></xsl:variable>
    		    <th class="entete">
                        <b><xsl:value-of select="string($le_nom3)"/></b>
                        </th> 
             </xsl:for-each>          
     
          </xsl:otherwise>
     
        </xsl:choose>   
     
      </xsl:template>
    Le problème est que j'ai bien les entetes que je désire mais pour celle que je ne veux pas, il me crée quand même une entête vide...

    Notamment, ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <xsl:for-each select="@*">
              <xsl:variable name="le_nom2"><xsl:choose> 
    	  <xsl:when test="name()='oa_nom_processus'">Name</xsl:when>
              <xsl:when test="name()='oa_date_heure_gmt_deb_processus'">Start Time</xsl:when>
              <xsl:when test="name()='oa_date_heure_gmt_fin_processus'">End Time</xsl:when>
    	  <xsl:when test="name()='oa_code_retour_processus'">Return Code</xsl:when>
    	  </xsl:choose></xsl:variable>
     
              <th class="entete">
              <b><xsl:value-of select="string($le_nom2)"/></b>
              </th>
            </xsl:for-each>
    Comment lui dire que pour les attributs ou je ne fais pas de règles de remplacement de nom, de ne pas faire de <th>...
    Voila, dsl pour ce texte aussi long, je suis vraiment pas sur d'avoir été clair, mais en tout cas, j'espère que l'un d'entre vous vois de quoi je parle...
    Ah et puis si vous aviez des idées pour un xsl correspondant à ce que je recherche, ça serait aussi très sympa parce que tout recommencer me motive moins qu'au début...

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut
    Personne n'a d'idée, à moins que je ne me sois mal exprimé, ça c'est possible...

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/04/2014, 15h15
  2. [Débutant] Afficher une seule fois les éléments d'un liste triée
    Par cry57 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 16/03/2011, 16h10
  3. Réponses: 4
    Dernier message: 03/07/2009, 09h45
  4. [MySQL] afficher une seule fois les données redondantes
    Par ginger4957 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 20/05/2009, 16h04
  5. [MySQL] afficher une seule fois les réponses identiques
    Par Giantrick dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/05/2007, 12h35

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