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 :

tableau avec 2 dimensions contrôlées selon la methode muench [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Par défaut tableau avec 2 dimensions contrôlées selon la methode muench
    Bonjour
    Je n'arrive pas a finir mon PB. Si quelqu'un pouvais m'apporter un petit d'aide ce serait sympa. Merci par avance.

    Je me suis servi d'un post du forum http://www.developpez.net/forums/d14...e/#post7787761

    Je souhaitais créer un tableau avec des paramètres biologique en colonne et des dates de test en ligne. Mes données ne comportent pas toujours les mêmes paramètres.
    Les tests sont regroupés par des numéros de lot.
    J'ai bien réussi a avoir tous mes paramètres en colonnes dans certaines conditions mais je n'arrive pas remplir mon tableau. Les données ne sont pas correctement filtrées

    Voici mes données
    Fichier XML
    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
    <qcdata>
       <labinfo>
            <instrument serialnumber='PNX9999'> NEXDX </instrument>
       </labinfo>
       <sampleset  lot="PX033L" >
          <result time="2013-03-27 17:40:00">
              <value param="GB"> GB 2013-03-27 </value>
              <value param="GR"> GR 2013-03-27 </value>
          </result>
          <result time="2014-12-27 6:40:00">
              <value param="GR"> GR 2014-12-27 </value>
              <value param="PLA"> PLA 2014-12-27 </value>
          </result>
       </sampleset>
       <sampleset  lot="PX033N" >
          <result time="2013-04-27 17:40:00">
              <value param="GB"> GB 2013-04-27 </value>
              <value param="HB"> HB 2013-04-27 </value>
          </result>
           <result time="2014-13-27 6:40:00">
              <value param="GB"> GB 2014-13-27 </value>
              <value param="GR"> GR 2014-13-27 </value>
              <value param="NEU"> NEU 12 2014-13-27 </value>     
          </result>
       </sampleset>
    </qcdata>
    Fichier XSL
    Le code entre les lignes 30 et 42 me posent PB. J'ai d'autre soucis mais celuici est le principal. Les autres je pourrais sans doute m'en sortir. Il faut bien que je bosse aussi ;-)
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" omit-xml-declaration="yes" encoding="utf-8" indent="yes" />
    <xsl:key name="parametre" match="result/value/@param" use="." />
    <xsl:template match="/">
        <html>
        <head></head>
        <body>
            <xsl:apply-templates select="qcdata/sampleset" mode="table" />
        </body>
        </html>
    </xsl:template>
    <xsl:template match="sampleset" mode="table">
        <table border="1">
        <tbody>
        <tr>
    		<th scope="col">LOT</th>
    		<th scope="col" >date heure</th>
    		<th scope ="col"> nb </th>
        <xsl:for-each select="result/value/@param[generate-id()=generate-id(key('parametre', .)[1])]">
            <th><xsl:value-of select="." /></th>
        </xsl:for-each>
        </tr>
    		<xsl:for-each select="/qcdata/sampleset">
    			<xsl:for-each select="current()/result">
    			<xsl:variable name="ctime" select="@time" />
    				<tr>
    				<td><xsl:value-of select="current()/../@lot"/></td>
    				<td><xsl:value-of select="current()/@time"/></td>
    				<td><xsl:number /></td>
    				<xsl:for-each select="//value[generate-id(@param)=generate-id(key('parametre', @param)[1])]">
    						<td>
    						<xsl:value-of select="current()"/> 
    						<xsl:variable name="cparam" select="@param" /> <br/>
    						<xsl:choose>
    							<xsl:when test="$ctime/../result[@time=$ctime]/value[@param=$cparam]">
    								<xsl:value-of select="$ctime/../result[@time=$ctime]/value[@param=$cparam]" />
    							</xsl:when>
    							<xsl:otherwise>
    								&#xa0;
    							</xsl:otherwise>
    						</xsl:choose>
    						</td>
    				</xsl:for-each>
    				</tr>
    			</xsl:for-each>
    		</xsl:for-each>
        </tbody>
        </table>
    </xsl:template>
    </xsl:stylesheet>
    Voici ce que je souhaiterai
    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
     <tr>
        <th>LOT</th>
        <th>date heure</th>
        <th> nb </th>
        <th>GB</th>      <th>GR</th>     <th>HB</th>        <th>PLA</th>       <th>NEU</th>
    </tr>
    <tr>
        <td>PX033L</td>
        <td>2013-03-27 </td>
        <td>1</td>
        <td>valGB1</td>  <td>valGR1</td>  <td>&nbsp;</td>    <td>&nbsp;</td>   <td>&nbsp;</td>
     
    </tr>
    <tr>
        <td>PX033L</td>
        <td>2014-12-27 </td>
        <td>2</td>
        <td>&nbsp;</td>  <td>valGR2</td>  <td>&nbsp;</td>  <td>valPLA2</td>    <td>&nbsp;</td>
    </tr>
    <tr>
        <td>PX033N</td>
        <td>2013-04-27 </td>
        <td>1</td>
        <td>valGB3</td>  <td>&nbsp;</td>  <td>valHB3</td>  <td>&nbsp;</td>    <td>&nbsp;</td>
    </tr>
    <tr>
        <td>PX033N</td>
        <td>2014-13-27 </td>
        <td>2</td>
        <td>valGB4</td>  <td>valGR4</td>  <td>&nbsp;</td>  <td>&nbsp;</td>    <td>valNEU4</td>
    </tr>
    ou sous une forme plus parlante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    LOT    | date heure    | nb |   GB   |   GR      |    HB     |    PLA    |    NEU    |
    PX033L | 2013-03-27    |  1 | valGB1 |   valGR1  |           |           |           |
    PX033L | 2014-12-27    |  2 |        |   valGR2  |           |   valPLA2 |           |
    PX033N | 2013-04-27    |  1 | valGB3 |           |   valHB3  |           |           |
    PX033N | 2014-13-27    |  2 | valGB4 |   valGR4  |           |           |  valNEU4  |

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Les difficultés sont pour la plûpart de cas qu'on visuelise pas tout à fait chaque ligne on écrit dans xslt. Votre code result à deux tableux et chaque fois avec des titres incomplets. Il vaut mieux vous parvenir à visualiser pourquoi. On peut faire comme ça.
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" omit-xml-declaration="yes" encoding="utf-8" indent="yes" />
    <xsl:key name="parametre" match="result/value/@param" use="." />
    <xsl:template match="/">
        <html>
        <head></head>
        <body>
        <table border="1">
        <tbody>
        <tr>
            <th scope="col">LOT</th>
            <th scope="col" >date heure</th>
            <th scope ="col"> nb </th>
            <xsl:for-each select="//result/value/@param[generate-id()=generate-id(key('parametre', .)[1])]">
                <th><xsl:value-of select="." /></th>
            </xsl:for-each>
        </tr>
        <xsl:apply-templates select="qcdata/sampleset/result" mode="table" />
        </tbody>
        </table>
        </body>
        </html>
    </xsl:template>
    <xsl:template match="result" mode="table">
        <tr>
            <td><xsl:value-of select="../@lot"/></td>
            <td><xsl:value-of select="@time"/></td>
            <td><xsl:number /></td>
            <xsl:variable name="n" select="." />
            <xsl:for-each select="//result/value[generate-id(@param)=generate-id(key('parametre', @param)[1])]">
                <td>
                    <xsl:if test="$n/value[@param=current()/@param]">
                        <xsl:value-of select="$n/value[@param=current()/@param]/text()" />
                    </xsl:if>
                    <xsl:if test="not($n/value[@param=current()/@param])">
                        <xsl:value-of select="'&#xa0;'" />
                    </xsl:if>
                </td>
            </xsl:for-each>
        </tr>
    </xsl:template>
    </xsl:stylesheet>
    Faites une comparaison pour comprendre chaque fois ou il y a une différence la raison.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Par défaut [XSLT 1.0] RESOLU tableau avec 2 dimensions contrôlées selon la methode muench
    Bonjour
    Merci beaucoup Tsuji.
    Déjà ca fonctionne super bien.
    J'ai fait l'essai sur les vrais fichiers beaucoup plus complexe.
    C'est nickel.

    Je vais me pencher sur les modifs que vous avez fait

    Maistouse

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Pour résumer en mots :
    - Un select des <sampleset> n'a rien à faire dans un match sur <sampleset>. Autrement dit, s'il y a besoin de faire un select des <sampleset>, il doit forcément être fait à un niveau au-dessus du <sampleset>.

    - Si tu connais un moyen d'énumérer toutes les colonnes d'en-tête, ce même moyen peut être utilisé pour énumérer toutes les colonnes d'une ligne. Il suffit de faire la même chose.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Par défaut
    Oui c'est clair
    Le premier essai que j'avais fait était une imbrication de boucle for each.
    J'étais encore dans cette vision.
    Il est effectivement possible de tous énumérer d'un coup

    Pour mon premier post sur developpez, j'ai obtenu toutes mes réponses que je souhaitais
    Merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/07/2013, 14h13
  2. fct avec tableau a 2 dimensions
    Par kharg dans le forum Débuter
    Réponses: 4
    Dernier message: 02/03/2008, 13h06
  3. Sorte de tableau a 2 dimension avec un vecteur
    Par undercrash dans le forum SL & STL
    Réponses: 7
    Dernier message: 10/10/2007, 11h52
  4. Réponses: 2
    Dernier message: 07/06/2007, 16h07
  5. [débutant] un tableau de dimension variable selon l'objet qui le contient
    Par Epistocles dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/01/2007, 18h07

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