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 :

Group-by noeud enfant [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    février 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2019
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Group-by noeud enfant
    Bonjour.

    sauriez vous comment réussir à grouper des nœuds parents par rapport à des valeurs de nœuds enfants ? (et là vaut mieux que je m'explique avec un exemple )
    Voici en plus clair le fichier XML de départ:
    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
    <?xml version="1.0" encoding="utf-8"?>
    <OrderInformation>
     <Order>
      <Products>
       <Product>
        <IdData>
         <DSF>
    	     <Id>366613</Id>
    	     <IdTypeName>OrderLineItem2</IdTypeName>
    	     <Description>RV2-1010</Description>
         </DSF>
        </IdData>			
    	<ProductData>
    	 <Shipments>
    	  <Shipment>
    		<ShippingDetailID>553359</ShippingDetailID>
    		<adresse>3 Rue de Paris</adresse>
    	  </Shipment>
    	  <Shipment>
    		<ShippingDetailID>553360</ShippingDetailID>
    		<adresse>67 Rue de la motte</adresse>
    	  </Shipment>
    	 </Shipments>
    	</ProductData>
       </Product>
       <Product>
    	<IdData>
    	 <DSF>
    		<Id>366613</Id>
    		<IdTypeName>OrderLineItem2</IdTypeName>
    		<Description>RV1-0903403</Description>
    	 </DSF>
    	</IdData>
    	<ProductData>
    	 <Shipments>
    	  <Shipment>
    		<ShippingDetailID>553360</ShippingDetailID>
    		<adresse>67 Rue dela motte</adresse>
    	  </Shipment>
    	 </Shipments>
    	</ProductData>
       </Product>
      </Products>
     </Order>
    </OrderInformation>
    et je cherche à obtenir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
    <OrderInformation>
    	<Ship553359>
    		<ShippingDetailID>553359</ShippingDetailID>
    		<adresse>3 Rue de Paris</adresse>
                    <Description>RV2-1010</Description>
    	</Ship553359>
    	<Ship553360>
    		<ShippingDetailID>553360</ShippingDetailID>
    		<adresse>67 Rue de lamotte</adresse>
    		<Description>RV2-1010 \n RV1-0903403</Description>
    	</Ship553360>
    </OrderInformation>
    Il y a donc 2 product, le premier a 2 shipment et le deuxième 1 seul shipment
    Je cherche donc en quelque sorte à inverser les noeuds, ne plus avoir les shipment dans les product mais avoir les product dans les shipment et mettre un saut de ligne pour séparer la description lorsqu'il y a plusieurs product dans 1 shipment.

    Merci d'avance à l'âme généreuse qui saura me guider .

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    octobre 2011
    Messages
    1 552
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 552
    Points : 2 715
    Points
    2 715
    Par défaut
    Comme ça; par exemple.
    Code xslt2 : 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
    <xsl:template match="/OrderInformation">
        <xsl:copy>
            <xsl:apply-templates select="Order/Products" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Products">
        <xsl:for-each-group select="Product/ProductData/Shipments/Shipment/ShippingDetailID" group-by="normalize-space()">
            <xsl:element name="{concat('Ship', current-grouping-key())}">
                <xsl:copy-of select="." />
                <adresse><xsl:value-of select="following-sibling::adresse/normalize-space()" /></adresse>
                <Description>
                    <xsl:value-of select="ancestor::Products/Product/IdData[following-sibling::ProductData/Shipments/Shipment/ShippingDetailID/normalize-space()=current-grouping-key()]/DSF/Description/normalize-space()" separator=" \n " />
                </Description>
            </xsl:element>
        </xsl:for-each-group>
    </xsl:template>

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    février 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2019
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour et merci Tsuji, c'est exactement ça .
    Bonne journée et Joyeuses Pâques .

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

Discussions similaires

  1. Duplication et suppression de noeud enfant en javascript
    Par kalbo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/05/2008, 16h54
  2. [C#-XML] Récupérer les valeurs des noeuds enfants
    Par cyllix dans le forum Windows Forms
    Réponses: 1
    Dernier message: 23/06/2006, 11h54
  3. [XML] Parser selon des noeuds enfants
    Par GLDavid dans le forum Modules
    Réponses: 5
    Dernier message: 20/08/2004, 20h42
  4. [XSL] aide pour lire un id de noeud enfant.
    Par stebar dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 01/07/2004, 13h38

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