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 :

Problème utilisation following-sibling


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 2
    Par défaut Problème utilisation following-sibling
    Bonjour à tous, je n'arrive pas à créer la feuille de style adéquate pour appliquer la transformation suivante, aussi vous serais-je reconnaissant si l'un d'entre vous pouvez me mettre sur une piste.

    Voici mon xml source :

    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
    <LOTS>
    	<NUM_LOT/>
    	<NUM_LOT>1</NUM_LOT>
    	<DESC>description 1 </DESC>
    	<NOM>nom1</NOM>
    	<ADRESSE>addresse1</ADRESSE>
    	<CP>0000</CP>
    	<VILLE>ville1</VILLE>
    	<MONTANT_HT>montant1</MONTANT_HT>
    	<DATE>date1</DATE>
    	<NB_OFFRES>9</NB_OFFRES>
    	<NUM_LOT>2</NUM_LOT>
    	<DESC>description2 </DESC>
    	<NOM>nom2</NOM>
    	<ADRESSE>addresse2</ADRESSE>
    	<CP>0000</CP>
    	<VILLE>ville2</VILLE>
    	<MONTANT_HT>montant2</MONTANT_HT>
    	<NUM_LOT>3</NUM_LOT>
    	<DESC>description3</DESC>
    	<NOM>nom1</NOM>
    	<ADRESSE>addresse3</ADRESSE>
    	<CP>0000</CP>
    	<VILLE>ville3</VILLE>
    	<MONTANT_HT>montant3</MONTANT_HT>
    	<DATE>date3</DATE>
    	<NB_OFFRES>2</NB_OFFRES>
    </LOTS>
    Et le résultat que je cherche à obtenir
    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
    <LOTS>
    	<LOT>
    		<NUM_LOT>1</NUM_LOT>
    		<DESC>description 1 </DESC>
    		<NOM>nom1</NOM>
    		<ADRESSE>addresse1</ADRESSE>
    		<CP>0000</CP>
    		<VILLE>ville1</VILLE>
    		<MONTANT_HT>montant1</MONTANT_HT>
    		<DATE>date1</DATE>
    		<NB_OFFRES>9</NB_OFFRES>
    	</LOT>
    	<LOT>
    		<NUM_LOT>2</NUM_LOT>
    		<DESC>description2 </DESC>
    		<NOM>nom2</NOM>
    		<ADRESSE>addresse2</ADRESSE>
    		<CP>0000</CP>
    		<VILLE>ville2</VILLE>
    		<MONTANT_HT>montant2</MONTANT_HT>
    	</LOT>
    	<LOT>
    		<NUM_LOT>3</NUM_LOT>
    		<DESC>description3</DESC>
    		<NOM>nom1</NOM>
    		<ADRESSE>addresse3</ADRESSE>
    		<CP>0000</CP>
    		<VILLE>ville3</VILLE>
    		<MONTANT_HT>montant3</MONTANT_HT>
    		<DATE>date3</DATE>
    		<NB_OFFRES>2</NB_OFFRES>
    	</LOT>
    </LOTS>
    J'ai bien essayé d'itérer sur /lots/* en checkant le following-sibling::*[1] et testant si il est différent de NUM_lOT, mais cela n'est pas concluant,

    Je pense qu'il me faudrait pouvoir quand je suis sur un noeud NUM_LOT pouvoir récupérer le contenu de chaque noeud suivant le noeud courant mais précédent le prochain noeud NUM_LOT et je ne sais pas comment faire, quelqu'un aurait-il une idée ?

    Merci d'avance.

  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
    Je propose de s'inspirer d'un regroupement Muench.

    Il s'agirait de créer une clé sur tous les éléments, indexée par "le numéro du <NUM_LOT> précédent le plus proche"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:key name="lots"
      match="/LOTS/*"
      use="preceding-sibling::NUM_LOT[1]"/>
    Ensuite, chaque fois que tu tombes sur un NUM_LOT, tu peux sélectionner les éléments à mettre avec comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    key('lots', .)[name() != 'NUM_LOT']
    (la partie name() != 'NUM_LOT' est nécessaire parce que le use de ma clé fait que les éléments NUM_LOT eux-mêmes ne sont pas bien groupés et doivent être gérés séparément. On pourrait corriger ça avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:key name="lots"
      match="/LOTS/*"
      use="self::NUM_LOT|preceding-sibling::NUM_LOT[1]"/>
    De sorte qu'un NUM_LOT se groupe avec lui-même plutôt qu'avec son suivant. Utiliser :

    )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Bonjour,

    J'aurais procédé un peu comme toi :
    Code XSL : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:template match="/LOTS>">
    		<LOTS>
    			<xsl:for-each select="NUM_LOT">
    				<LOT>
    					<xsl:copy-of select="."/>
    					<xsl:apply-templates select="following-sibling::.[1]" mode="lot"/>
    				</LOT>
    			</xsl:for-each>
    		</LOTS>
    	</xsl:template>
     
    	<xsl:template match="*" mode="lot">
    		<xsl:if select="name(.) != 'NUM_LOT'">
    			<xsl:copy-of select="."/>
    			<xsl:apply-templates select="following-sibling::.[1]" mode="lot"/>
    		</xsl:if>
    	</xsl:template>
    </xsl:stylesheet>

    Pour chaque NUM_LOT, on recopie tous les éléments jusqu'au NUM_LOT suivant.

    Par contre, j'ai pas pu testé.

Discussions similaires

  1. [XPATH 1.0] Utilisation des commandes following-sibling, preceding-sibling, parent & child
    Par lemoussel dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/01/2014, 08h07
  2. Utilisation de following-sibling
    Par Laughing Man dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 13/08/2009, 15h59
  3. [JSTL] [EL] Problème utilisation <c:out>
    Par XavierL dans le forum Taglibs
    Réponses: 7
    Dernier message: 14/08/2005, 20h12
  4. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26
  5. [JAR]Problème utilisation manifest et jar
    Par doudine dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 07/01/2005, 10h21

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