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 :

XSL comparaison ligne tableau


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 37
    Points : 24
    Points
    24
    Par défaut XSL comparaison ligne tableau
    Bonjour ,

    je suis en train de developper un .XSL ( Xml style) cependant j'éprouve quelque difficulté pour réaliser ce 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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
     
    <xsl:template match="/"> 
    <html>
    <header>
     	<title> XML_Rapport </title>
    </header>
    <body bgcolor="#FFFFCC">
     
    <table style=" width:70% ; align:center">
    	<tr>
    	<img style="float:left" src="http://94.23.30.57/portailDS/Imgs/logoDsBas.png" />
    	<th style="border:3" ><H1><u>Rapport de Copie</u></H1></th>
     
    	</tr>
    </table>
     
    <br />
    <hr />
    <p> <b>Rapport de Copie du :</b> <xsl:value-of select="RapportCopie/DCP_Copie/Date"/></p>
    <p> <b>Nom du DCP : </b><xsl:value-of select="RapportCopie/DCP_original/Nom_DCP"/></p>
    <hr />
    <br />
     
     
    <table border="2" cellspacing="0" cellpadding="3" bgcolor="#C0C0C0"  style="float:left ; width:70% ">
     
    	<tr bgcolor="FF9900">
    	<th>Nom du Fichier Original</th>
    	<th>Hash Original</th>
    	</tr>
     
    	<xsl:for-each select="RapportCopie/DCP_original/Hash">
    		<tr>
    		<td><xsl:value-of select="@name"/></td>
    		<td><xsl:value-of select="@hash"/></td>
    		</tr>
    	</xsl:for-each>
     
    	<tr bgcolor="FF9900">
    	<th>Nom du Fichier Originale</th>
    	<th>Taille Fichier Originale </th>
    	</tr>
    	<xsl:for-each select="RapportCopie/DCP_original/Taille_fichier_octet">
    		<tr>
    		<td><xsl:value-of select="@name"/></td>
    		<td><xsl:value-of select="@size"/></td>
    		</tr>
    	</xsl:for-each>
     
    </table>
     
    <table border="2" cellspacing="0" cellpadding="3" style=" width:30% " bgcolor="#CCCCFF"  >
     
    	<tr bgcolor="#FFFF00">
    	<th>Hash Fichier Copier </th>
    	</tr>
     
    	<xsl:for-each select="RapportCopie/DCP_Copie/Hash">
    		<tr>
    		<td><xsl:value-of select="@hash"/></td>
    		</tr>
    	</xsl:for-each>
     
    	<tr bgcolor="#FFFF00" >
    	<th>Taille Fichier Copier </th>
    	</tr>
    	<xsl:for-each select="RapportCopie/DCP_Copie/Taille_fichier_octet">
    		<tr>
    		<td><xsl:value-of select="@size"/></td>
    		</tr>
    	</xsl:for-each>
     
    </table>
     
    <br />
    <hr />
    <p align="center"><FONT size="1pt">  Généré par DCP_TOOLS </FONT></p>
    <p align="center"><FONT size="1pt">  <a href="http://www.distri-service.com">Site de Distribution service</a></FONT></p>
     
    </body>
    </html>
     
    </xsl:template>
    </xsl:stylesheet>
    Voila ce code XSL me donne une page avec 2 tableau affichant les valeurs d'un fichier XML cependant je voudrais rajouter une colonne supplémentaire afin de dire si la colonne 2 et 3 sont identique alors OK

    Plus clairement je posséde un tableau de 3 colonne ( nom du fichier , hash fichier , hash fichier après copie ) je voudrais une quatrième colonne afin de dire si hash fichier == hash fichier copie je pense que c'est simple mais je ne sais pas du tout si c'est possible a faire et si oui comment ne maîtrisant que très peu ce XSL je galère un peu

    Si quelqu'un a une idée je suis preneur

    Bien cordialement

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 847
    Points
    4 847
    Par défaut
    Citation Envoyé par flaschgordon Voir le message
    Plus clairement je posséde un tableau de 3 colonne ( nom du fichier , hash fichier , hash fichier après copie ) je voudrais une quatrième colonne afin de dire si hash fichier == hash fichier copie
    C'est possible, il suffit de faire un test avec un choose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <xsl:choose>
      <xsl:when test="RapportCopie/DCP_original/Hash = RapportCopie/DCP_Copie/Hash">
        <!-- valeur en cas d'égalité -->
      </xsl:when>
      <xsl:otherwise>
        <!-- valeur en cas de différence -->
      </xsl:otherwise>
    </xsl:choose>
    Par contre tu n'as absolument pas une table avec 3 colonnes actuellement. Tu as 2 tables collées l'une à l'autre, la première avec deux colonnes et la seconde avec une.
    Il serait beaucoup plus simple pour toi, plus tard, de ne faire qu'une seule table et de traiter ça ligne par ligne plutôt que colonne par colonne comme tu le fais actuellement.

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Effectivement pardon 2 table comme tu la bien dit j'ai effectivement 2 table .
    Je vais regarder cela merci beaucoup c'est vrai que j'ai beaucoup de mal avec la syntaxe de XSL c'est assez moche ^^

    Je reviens vers vous pour dire ou j'en suis et si je n'ai pas plus aucuns problème

    Merci encore

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    je revient donc vers vous j'ai bien pris note de la fonction choose j'ai donc placé ainsi dans mon code

    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
     
    <tr bgcolor="#FFFF00">
    <th>Hash Fichier Copier </th>
    </tr>
     
     
    	<xsl:for-each select="RapportCopie/DCP_Copie/Hash">
    		<xsl:choose>
    		<xsl:when test="RapportCopie/DCP_original/Hash = RapportCopie/DCP_Copie/Hash">
    			<tr>
    			<td bgcolor="#99FF99"><xsl:value-of select="@hash"/></td>
    			</tr>
    		</xsl:when>
    		<xsl:otherwise>
    	    		<tr>
    			<td bgcolor="#FF6666"><xsl:value-of select="@hash"/></td>
    			</tr>
    	 	 </xsl:otherwise>
    		 </xsl:choose>
    	</xsl:for-each>
    Cependant cela ne marche pas en effet le test qui je demande c'est si Hash = Hash cependant mon fichier XML est comme ceci

    <Hash name=truc.mxf hash=djdieaodlfp></Hash>
    Comment puis-je donc acceder a la donnée hash dans mon test ?

    Encore merci de vôtre aide
    Bien cordialement

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut

    Il faut faire un peu des tutoriels quand même, avant de poser des question. Ça va bien plus vite -_-°.

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    J'ai dit plus haut que je ne maîtrisais que très peu cependant tu as pu remarquer dans le code fournit en premier post que j'ai déjà utiliser ce genre de balise , je sais donc que le @valeur me permet d'accéder a un attribut j'ai donc demandé cela plus pour une certitude que par méconnaissance car mon test ne marche pas et je ne vois pas d’où peut provenir le problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <xsl:for-each select="RapportCopie/DCP_Copie/Hash">
    		<xsl:choose>
    		<xsl:when test="RapportCopie/DCP_original/Hash/@hash = RapportCopie/DCP_Copie/Hash/@hash">
    			<tr>
    			<td bgcolor="#99FF99"><xsl:value-of select="@hash"/></td>
    			</tr>
    		</xsl:when>
    		<xsl:otherwise>
    	    		<tr>
    			<td bgcolor="#FF6666"><xsl:value-of select="@hash"/></td>
    			</tr>
    	 	 </xsl:otherwise>
    		 </xsl:choose>
    	</xsl:for-each>
    mon test met en rouge les lignes non égale et en vert les lignes égale du moins c'est l'idée que je veux mettre en place mais cela ne semble pas du tout marcher puisqu'il me met tout en rouge

    Donc quand je pense que le test n'est peut être pas si bon il ne doit pas pouvoir acceder a la bonne valeur et la je ne vois pas pourquoi

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Ah, effectivement, le problème n'a rien à voir avec l'accès au hash.
    Le problème c'est d'associer un <DCP_Copie> au <DCP_original> correspondant.

    A priori j'imagine qu'il y a autant de <DCP_Copie> que de <DCP_original>, et qu'ils sont dans le même ordre. Sinon je vois pas trop comment tu compterais faire.
    Du coup dans ton for-each on peut se servir de la position() de l'élément <DCP_Copie>, pour aller le <DCP_original> à la même position.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="RapportCopie/DCP_Copie/Hash">
      <!-- Sauvegarder la position dans la boucle. -->
      <xsl:variable name="pos" select="position()"/>
      <xsl:choose>
        <!-- Il faut pas répéter le chemin complet du <DCP_Copie> puisqu'il est dans le for-each.
               Par contre il faut aller chercher le DCP_original -->
        <xsl:when test="@hash = (/RapportCopie/DCP_original/Hash)[$pos]/@hash">

  8. #8
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Eh bien merci beaucoup
    cela fonctionne parfaitement

    En faite si j'ai bien compris pos prend en parametre le chemin /RapportCopie/DCP_Copie/Hash , mais la ou je trouve que ce n'est pas logique du moins a mon avis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (/RapportCopie/DCP_original/Hash)[$pos]/@hash
    enfaite je ne comprend pas trop le fonctionnement de position dans le cas ci-dessus car sa je voudrait comprendre un peu mieux mais c'est assez bizarre le XSL

    Merci beaucoup de ta patience et de ton aide
    Sujet résolut

    Bien cordialement

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    - /RapportCopie/DCP_original/Hash : prendre les <Hash> qui sont à cet endroit.
    - le mettre entre () et ajouter [] : (/RapportCopie/DCP_original/Hash)[ prédicat ] : dans les <Hash> sélectionnés, ne garder que ceux qui répondent à la condition du prédicat
    - [$pos] : la condition est le contenu de la variable $pos. Comme nous l'avons défini par select="position()", cette variable est un nombre entier. Quand on donne un nombre entier comme condition, par exemple [8], c'est équivalent à [position() = 8].
    Donc l'expression est équivalente à (/RapportCopie/DCP_original/Hash)[ position() = $pos ]. Nous cherchons à sélectionner le <Hash> qui se trouve sous <DCP_original>, à la même position que le <Hash> qu'on a sélectionné dans le for-each.
    - /@hash pour sélectionner l'attribut du <Hash> en question.

    Un peu chaud mais rien de magique.

  10. #10
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Merci de cette éclaircissement , c'est effectivement assez chaud quand on me maîtrise que peu mais j'ai compris merci

    Bien cordialement

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

Discussions similaires

  1. comparaison lignes d'un tableau
    Par roxydc dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/09/2012, 21h31
  2. [xsl-fo] ligne dans un tableau
    Par citizen87 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/04/2010, 11h15
  3. Faire apparaitre/disparaitre lignes tableau -Comment Faire ?
    Par mathieu7497 dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 31/03/2006, 23h39
  4. [Tableaux] débutant : supprimer ligne tableau
    Par samplaid dans le forum Langage
    Réponses: 2
    Dernier message: 27/03/2006, 10h39
  5. xsl-fo : ligne de tableau specifique en fonction d'un test
    Par de LANFRANCHI dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 12/05/2005, 08h24

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