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

XML/XSL et SOAP Discussion :

Problème attributs xsl


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Par défaut Problème attributs xsl
    Bonjour,

    Je vous présente mon problème, en espérant y trouver une solution.
    Une imprimante me génère automatiquement un fichier .xml récapitulatif des impressions par services et par type d'impression, et je souhaite, pour plus de clarté (il fait quand même 655 lignes), le lier à un xsl pour un affichage html, avec juste ce qui m'intéresse. Jusque là tout va bien.
    Sauf que... (je débute donc ne sait pas trop comment le dire...).

    Un bout du 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
    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
    <DepartmentCodes>
    <DeptNumber Number="1">
    <DeptName>Service 1</DeptName>
    <DeptCode>un nombre</DeptCode>
    <ChargeCounter>
    <Counter Mode="PRINT" Color="FULL" Type="COPY">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="PRINT" Color="FULL" Type="PRINT">
    <Large>270</Large><Small>1232</Small>
    </Counter>
    <Counter Mode="PRINT" Color="TWIN" Type="COPY">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="PRINT" Color="TWIN" Type="PRINT">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="PRINT" Color="BLACK" Type="COPY">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="PRINT" Color="BLACK" Type="PRINT">
    <Large>0</Large><Small>2346</Small>
    </Counter>
    <Counter Mode="PRINT" Color="BLACK" Type="LIST">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="PRINT" Color="BLACK" Type="FAX">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="SCAN" Color="FULL" Type="COPY">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="SCAN" Color="FULL" Type="NET">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="SCAN" Color="TWIN" Type="COPY">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="SCAN" Color="BLACK" Type="COPY">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="SCAN" Color="BLACK" Type="NET">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="SCAN" Color="BLACK" Type="FAX">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="FAX" Color="BLACK" Type="TRANSMIT">
    <Large>0</Large><Small>0</Small>
    </Counter>
    <Counter Mode="FAX" Color="BLACK" Type="RECEIVE">
    <Large>0</Large><Small>0</Small>
    </Counter>
    </ChargeCounter>
    Donc voilà, je souhaite afficher chaque type d'impression séparément, pour chaque service, soit, les impression couleur, noir et blanc,et format... pour le service 1, la même chose pour le 2, et ainsi de suite. (plus haut il n'y qu'un service).

    J'ai pour le moment:
    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
    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:template match="/">
     
    			<html>
    				<body>
    						<h3>
    							Récapitulatif du -- '<xsl:value-of select="/CounterNotification/Date"/>'
    						</h3>
     
    						<p>
    							Nom de la machine: <u><xsl:value-of select="/CounterNotification/MachineModel"/></u>
    						</p>
    						<xsl:apply-templates />
     
    				</body>
    			</html>
    </xsl:template>
     
    <xsl:template match="DeptNumber">	
    	<html>	
    		<body>
     
    			<p>
    				Service: <u><xsl:value-of select="DeptName"/></u><br/>
    				Code: <u><xsl:value-of select="DeptCode"/></u><br/>
    				Type d’impression 1:
     
                                    Type d'impression 2:
     
                                    ....
     
     
    			</p>
     
     
     
     
    		</body>
    	</html>
    </xsl:template></xsl:stylesheet>
    J'ai essayer <xsl:value-of select="ChargeCounter/Counter"/> (qui affiche tout mais illisible), aussi <xsl:value-of select="ChargeCounter/Counter/Large"/> avec <xsl:value-of select="ChargeCounter/Counter/Small"/> qui m'affiche juste les deux premières valeurs, et <xsl:value-of select="ChargeCounter/Counter/@PRINT"/> ainsi que la même avec /@FULL/@COPY derrière, qui n'affichent rien...


    Merci d'avance pour votre aide

  2. #2
    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
    #1 - En fait c'est assez compliqué par nature.

    Tu essaies de faire des regroupements de données, et en XSLT c'est compliqué.

    Il faut utiliser un regroupement Muench décrit dans la FAQ.

    Mais l'exemple montre un regroupement sur une propriété. Toi tu cherches à regrouper par département, type, mode et couleur. Ce sont quatre propriétés au lieu d'une.

    Entraîne-toi d'abord à un truc simple, comme regrouper seulement par type. Sinon tu n'arriveras à rien.

    Ensuite, ajoute le regroupement pour chaque département. Il te faudra une clé genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use="concat(../../DeptCode, '_', @Type)"
    Ensuite, tu ajoutes le regroupement par mode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use="concat(../../DeptCode, '_', @Type, '_', @Mode)"
    Puis par couleur.

    Bon courage, mais commence par le début.

    #2 - Vire le <html><body> dans ton deuxième template. Une transformation XSLT génère un seul document HTML, avec une seule balise <html> et une seule balise <body>.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Par défaut
    D'accord, merci thelvin, je vais essayer ça, je vous tiens au courant.

    Voilà, j'ai essayé, je n'y suis pas arrivé... je tente toujours.
    Mais, une question m'est venu à l'esprit, est-ce bien un regroupement qu'il faut faire ici? J'avoue que je ne connait pas vraiment ce langage, donc je ne sait trop quoi faire...

    Schématiquement j'ai:
    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
    Début
     
       Départements
          Département 1
             Compteur d'impressions
                Genre 1
                   Format A3
                   Format A4
                Genre 2
                   Format A3
                   Format A4
                ...
     
          Département 2
             Compteur d'impression
                Genre 1
                   ...
                Genre 2
                   ...
                ...
          ...
     
    Fin

    Et je voudrais donc afficher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Département 1
    Genre 1: nb d'impressions A3 / nb d'mpressions A4
    Genre 2: ...
    ...
     
    Département 2: 
    ...
    ...
     
    ...
    Mais j'arrive à faire:

    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
    Département 1
    Tout genre: nb tous collés (donc illisible)
     
    Département 2
    ...
     
    ...
     
    OU
     
    Département 1
    Genre 1: nb d'impressions A3 / Nb d'impression A4
    (pas de genre 2, 3,...)
     
    Département 2
    ...
     
    ...
    Je n'est pas l'impression de regrouper les informations, mais juste de les afficher.
    Mon problèmes viens des balises <Counter> (schématisés Genre 1, Genre 2,...). A cause des paramètres (je suppose), je n'arrive à afficher que le genre 1, or, j'ai quand même 16 genres à faire apparaître.

  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
    Citation Envoyé par Riska Voir le message
    Je n'est pas l'impression de regrouper les informations, mais juste de les afficher.
    Effectivement, dans ce cas toute ma partie #1 est complètement à côté.

    J'essaie de voir ce qui te pose problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Par défaut
    Ok, merci bien, en attendant, j'essaye de trouver une solution aussi (je suis sûre que c'est tout bête en plus...).

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 23
    Par défaut
    Il faut voir ce que tu entends par "type d'impression" mais pourquoi ne pas faire ça. J'ai regroupé les "Counter" par @Mode

    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
     
      <xsl:template match="DeptNumber">
        <p>
          Service: <u><xsl:value-of select="DeptName"/></u><br/>
          Code: <u><xsl:value-of select="DeptCode"/></u><br/>
     
          Print : <xsl:call-template name="counter">
            <xsl:with-param name="els" select="ChargeCounter/Counter[@Mode='PRINT']"/>
          </xsl:call-template>
          Scan : <xsl:call-template name="counter">
            <xsl:with-param name="els" select="ChargeCounter/Counter[@Mode='SCAN']"/>
          </xsl:call-template>
          Fax : <xsl:call-template name="counter">
            <xsl:with-param name="els" select="ChargeCounter/Counter[@Mode='FAX']"/>
          </xsl:call-template>
        </p>
      </xsl:template>
     
      <xsl:template name="counter">
        <xsl:param name="els"/>
        <xsl:value-of select="sum($els/Large)"/>
        <xsl:value-of select="sum($els/Small)"/>
      </xsl:template>

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Par défaut
    En fait, le xml est généré automatiquement,tout les mois, donc je doit y toucher le moins possible.

    L'objectif est de pouvoir avoir un détail facilement lisible de l'utilisation des imprimantes, donc de pouvoir afficher les impressions, les scans, et fax, en couleur et noir et blanc, pour chaque service, afin de pouvoir faire un peut les compte, mais aussi de voir quel service est plus consommateur.

    Merci pour ce code, je vais essayer d'y ajouter color.


    Voilà, ça fonctionne parfaitement, un grand merci à toi volblanc, c'était exactement ça, et merci aussi à thelvin

    Et un "résolu".

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

Discussions similaires

  1. [XSLT]problème attribute xsl style
    Par watchabongo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/02/2008, 14h17
  2. Problème basique XSL
    Par tarrant17 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/02/2006, 13h32
  3. probléme avec xsl
    Par linniesurf dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/02/2006, 23h21
  4. [XSLT] Problème PHP + XSL
    Par thefaycal dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/12/2005, 09h16
  5. [XSL]problème avec <xsl:when>
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 27/05/2005, 16h54

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