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] Fusionner 2 xml


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut [XSL] Fusionner 2 xml
    Bonjour à toutes et à tous...

    Je savais bien que je reviendrais...

    J'ai une question qui a certainement due être déjà posée quelque part...
    Comment fusionner 2 xml avec un xsl ?

    J'ai un fichier source A
    ~~~~~~~~~~~~~~~
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <Ventes Vendeur="Durant" Ordi="Station4" Date="24/05/2004 11:49:58">
    	<Clients> 
    		<TableClient> 
    			<TableClient_Enr IDCLI="1" Nom="Durant" Prenom="Paul" /> 
    			<TableClient_Enr IDCLI="2" Nom="Sausset" Prenom="Jacques" /> 
    			<TableClient_Enr IDCLI="3" Nom="Brimare" Prenom="Pierre" /> 
    		</TableClient> 
    	</Clients> 
    </Ventes>
    Et un second fichier source B
    ~~~~~~~~~~~~~~~~~~~
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <Ventes Vendeur="Dupont" Ordi="Station5" Date="25/05/2004 11:18:25">
    	<Clients> 
    		<TableClient> 
    			<TableClient_Enr IDCLI="1" Ville="Paris" Telephone="0142434445" /> 
    			<TableClient_Enr IDCLI="2" Ville="Rouen" Telephone="0333445566" /> 
    			<TableClient_Enr IDCLI="3" Ville="Paris" Telephone="0145474951" /> 
    		</TableClient> 
    	</Clients> 
    </Ventes>
    Et je vousdrais en extraire un fichier finale AB comme suit:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <Ventes Vendeur="Dupont" Ordi="Station5" Date="25/05/2004 11:18:25">
    	<Clients> 
    		<TableClient> 
    			<TableClient_Enr IDCLI="1"  Nom="Durant" Prenom="Paul" Ville="Paris" Telephone="0142434445" /> 
    			<TableClient_Enr IDCLI="2"  Nom="Sausset" Prenom="Jacques" Ville="Rouen" Telephone="0333445566" /> 
    			<TableClient_Enr IDCLI="3"  Nom="Brimare" Prenom="Pierre" Ville="Paris" Telephone="0145474951" /> 
    		</TableClient> 
    	</Clients> 
    </Ventes>
    La clé entre les deux étant définie (ici IDCLI)

    Quelqu'un a t-il une idée ? J'ai essayé en VB.Net, c'est réalisable mais on me demande d'exploiter la techno XSL pour le faire (Grrrr )

    Par avance, merci

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  2. #2
    Membre éclairé
    Inscrit en
    Février 2004
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 102
    Par défaut Re: [XSL] Fusionner 2 xml
    Salut,

    Citation Envoyé par argyronet
    on me demande d'exploiter la techno XSL pour le faire.
    Qu'est ce que tu sousentends par technologie XSL :

    Perso, j'utilise java pour traiter mes flux XML avec un transformer qui prend un document XML et un fichier XSLT en paramètres.
    T'aurais la possibilité d'utiliser java :

    A+

  3. #3
    Membre éprouvé Avatar de agueffier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 93
    Par défaut
    Bonjour Argyronet,

    Recherches dans le forum avec le mot document().

    A+

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut Pour répondre à JustAGphy
    Re,

    Ce que j'entends par :

    • on me demande d'exploiter la techno XSL pour le faire.


    C'est que je dois utiliser un parser qui exploite les fonctionnalités d'un fichier XLS avec des XPath...

    En fait, j'utilise .net et je voudrais exploiter les focntionnalités des Dataset() mais la methode DatasetA.merge(DatasetB) ne me convient pas.
    Il faut que je fasse un parcours de chaque noeud car dans l'élément tableClient, j'ai en réalité la clé primaire de ma table...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Clients> 
          <TableClient PrimaryKey="IDCLI"> 
             <TableClient_Enr IDCLI="1" Nom="Durant" Prenom="Paul" />
             [...]
    Ce qui fait que je peux aisément matcher 2 éléments possédant un même attribut en .net mais en utilisant un xsl, c'est tout autre chose... Mais je pense y arriver.

    J'entends bien qu'un xml peut générer un autre xml via un xsl mais que deux xml (ayant des noeuds et attributs communs) puisse générer un troisième xml via un xsl... là j'ai aucune compétence.
    Voilà pourquoi ce post.

    Merci

    P.S. Merci agueffier, je vais chercher...
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut Bah, c'est un echec...
    Re,

    Eh, j'ai le regret de vous dire que...

    J'ai pas réussi...

    Bon, j'abondonne l'idée du XSL.
    Si qqun a un bout de code en c# ou vb.net ou une solution, je suis preneur...

    Moi, j'ai fait ça mais ça donne pas ce que je veux...
    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
     
        Try
     
          Dim xmlreader1 As XmlTextReader = New XmlTextReader("C:\XSL\Merge\sourceA.xml")
          Dim xmlreader2 As XmlTextReader = New XmlTextReader("C:\XSL\Merge\sourceB.xml")
          Dim ds1 As New DataSet
          Dim ds2 As New DataSet
          ds1.ReadXml(xmlreader1)
          ds2.ReadXml(xmlreader2)
     
          ds1.Merge(ds2)
          ds1.WriteXml("C:\XSL\Merge\resultAB.xml")
          MsgBox("Completed merging XML documents")
     
        Catch ex As Exception
          MsgBox(ex.Message)
        End Try

    Voyez par vous-même la cata

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" standalone="yes" ?> 
    - <Ventes Vendeur="Dupont" Ordi="Station5" Date="25/05/2004 11:18:25">
    - <Clients>
    - <TableClient>
      <TableClient_Enr IDCLI="1" Nom="Durant" Prenom="Paul" /> 
      <TableClient_Enr IDCLI="2" Nom="Sausset" Prenom="Jacques" /> 
      <TableClient_Enr IDCLI="3" Nom="Brimare" Prenom="Pierre" /> 
      <TableClient_Enr IDCLI="1" Ville="Paris" Telephone="0142434445" /> 
      <TableClient_Enr IDCLI="2" Ville="Rouen" Telephone="0333445566" /> 
      <TableClient_Enr IDCLI="3" Ville="Paris" Telephone="0145474951" /> 
      </TableClient>
      </Clients>
      </Ventes>

    Merci

    Bonne fin de journée...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  6. #6
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Salut argyronet

    Si on suppose que ton 1er fichier s'appelle fic1.xml et le deuxième fic2.xml, applique cette feuille de style sur fic1.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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    	<xsl:output method="xml" indent="yes"/>
     
    	<xsl:template match="/">
    		<Ventes>
    			<Clients>
    				<TableClient>
    					<xsl:apply-templates select="Ventes/Clients/TableClient/TableClient_Enr"/>
    				</TableClient>
    			</Clients>
    		</Ventes>
    	</xsl:template>
     
    	<xsl:template match="TableClient_Enr">
    		<xsl:copy>
    			<xsl:copy-of select="@*"/>
    			<xsl:copy-of select="document('fic2.xml')//TableClient_Enr[@IDCLI=current()/@IDCLI][1]/@*"/>
    		</xsl:copy>
    	</xsl:template>
     
    </xsl:stylesheet>
    Je pense que le code est suffisamment simple pour se passer de commentaires, mais n'hésite pas à demander des explications si nécessaire (c'est mieux de savoir ce qu'on fait).
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  7. #7
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut
    GrandFather...

    Tu es tombé dedans quand tu étais petit ou quoi

    Ben, tu es simplement, euh... GENIAL !

    Merci, franchement.

    J'allais pouvoir dormir tout de même...

    Bonne soirée

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut Ah, j'ai une tite question
    Bonjour,

    Bien, ce message s'adresse à GrandFather...
    Tu m'as proposé des explications, euh, hier, non parce j'ai juste mis en application et suis passé sur autre chose mais aujourd'hui oui:

    Ca marche nickel la proc que tu m'as transmis, toutefois, on se basait ici sur l'attribut IDCLI mais dans la portion de code où tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:copy-of select="document('fic2.xml')//TableClient_Enr[@IDCLI=current()/@IDCLI][1]/@*"/>
    1°) Quel est le rôle du [1] dans la syntaxe ?
    2°) Imagine que mon XML contienne deux, voir trois champs pour identifier un noeud dans l'autre fichier, je n'ai pas réussi à mettre en application l'opérateur AND pour 'matcher' IDCLI et IDGROUP;
    Par exemple, selon les fichiers 1 & 2 xml suivant comme hier:
    fic1.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <Ventes Vendeur="Durant" Ordi="Station4" Date="24/05/2004 11:49:58">
    	<Clients> 
    		<TableClient> 
    			<TableClient_Enr IDCLI="1" IDGROUP="AAB" Nom="Durant" Prenom="Paul" /> 
    			<TableClient_Enr IDCLI="2" IDGROUP="BBF"  Nom="Sausset" Prenom="Jacques" /> 
    			<TableClient_Enr IDCLI="3" IDGROUP="AAB"  Nom="Brimare" Prenom="Pierre" /> 
    		</TableClient> 
    	</Clients> 
    </Ventes>
    et fic2.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <Ventes Vendeur="Dupont" Ordi="Station5" Date="25/05/2004 11:18:25">
    	<Clients> 
    		<TableClient> 
    			<TableClient_Enr IDCLI="1" IDGROUP="AAB" Ville="Paris" Telephone="0142434445" /> 
    			<TableClient_Enr IDCLI="2" IDGROUP="BBF" Ville="Rouen" Telephone="0333445566" /> 
    			<TableClient_Enr IDCLI="3" IDGROUP="AAB" Ville="Paris" Telephone="0145474951" /> 
    		</TableClient> 
    	</Clients> 
    </Ventes>
    Ben, je voudrais m'assurer que la methode copy ne fusionne les données qu'à la condition unique de correspondance de deux noeud par l'équivalence des attributs IDCLI[1] = IDCLI[2] AND IDGROUP[1] = IDGROUP[2]...

    Je veux bien encore un petit coup de main.

    Merci.
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  9. #9
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut Re: Ah, j'ai une tite question
    Salut
    1°) Quel est le rôle du [1] dans la syntaxe ?
    Il n'est pas franchement nécessaire. Il sert à s'assurer que si plusieurs balises TableClient_Enr satisfont au même prédicat (elles ont le même IDCLI), on ne recopiera que les attributs d'une seule (la première). Si dans ta DTD tu as déclaré l'attribut IDCLI comme étant de type ID, tu peux retirer le [1]
    2°) Imagine que mon XML contienne deux, voir trois champs pour identifier un noeud dans l'autre fichier, je n'ai pas réussi à mettre en application l'opérateur AND pour 'matcher' IDCLI et IDGROUP;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:copy-of select="document('fic2.xml')//TableClient_Enr[@IDCLI=current()/@IDCLI and @IDGROUP=current()/@IDGROUP][1]/@*"/>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  10. #10
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut C bon
    Re,

    Bon, je pense que j'ai trouvé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
             <xsl:apply-templates select="document('sourceB.xml')//TableClient_Enr[@IDCLI=current()/@IDCLI and @IDGROUP=current()/@IDGROUP][1]/@*"/>
    Et en plus, ça marche.

    Qui sait, j'aurais peut-être d'autre galères...

    A +
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  11. #11
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut
    GrandFather, je pense que nos messages se son croisés... Toi avoir été + vite que moi.

    Merci...
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  12. #12
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut Aie aie aie...
    Bon, je reviens, décidément...

    GrandFather étant devenu mon interlocuteur privilégié, je me permet de le solliciter à nouveau:

    Comment faire pour que si dans mon fic2.xml, il existe (comme il existe un bloc 'TableClient' et 'TableProspect') un 3ème bloc nommé 'TableEnvoi' (absent de fic1.xml) pour que je puisse copier ce bloc dans mon fichier de sortie ?

    fic1.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
     
    <Ventes Vendeur="Durant" Ordi="Station4" Date="24/05/2004 11:49:58">
    	<Clients> 
    		<TableClient> 
    			<TableClient_Enr IDCLI="1" IDGROUP="AAB" Nom="Durant" Prenom="Paul" /> 
    			<TableClient_Enr IDCLI="2" IDGROUP="BBJ"  Nom="Sausset" Prenom="Jacques" /> 
    			<TableClient_Enr IDCLI="3" IDGROUP="AAB"  Nom="Brimare" Prenom="Pierre" /> 
    		</TableClient> 
    	</Clients> 
    	<Prospects> 
    		<TableProspect> 
    			<TableProspect_Enr IDPRO="7" Nom="Regient" Prenom="Arnaud" /> 
    			<TableProspect_Enr IDPRO="8" Nom="Camus" Prenom="Laurent" /> 
    			<TableProspect_Enr IDPRO="9" Nom="Frubert" Prenom="Luc" /> 
    		</TableProspect> 
    	</Prospects> 
    </Ventes>
    fic2.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
     
    <Ventes Vendeur="Dupont" Ordi="Station5" Date="25/05/2004 11:18:25">
    	<Clients> 
    		<TableClient> 
    			<TableClient_Enr IDCLI="1" IDGROUP="AAB" Ville="Paris" Telephone="0142434445" /> 
    			<TableClient_Enr IDCLI="2" IDGROUP="BBF" Ville="Rouen" Telephone="0333445566" /> 
    			<TableClient_Enr IDCLI="3" IDGROUP="AAB" Ville="Paris" Telephone="0145474951" /> 
    		</TableClient> 
    	</Clients> 
    	<Prospects> 
    		<TableProspect> 
    			<TableProspect_Enr IDPRO="7" Ville="Lyon" Telephone="0455888899" /> 
    			<TableProspect_Enr IDPRO="8" Ville="Marseille" Telephone="0455887777" /> 
    			<TableProspect_Enr IDPRO="9" Ville="Drancy" Telephone="0140668888" /> 
    		</TableProspect> 
    	</Prospects> 
    	<Envois> 
    		<TableEnvoi> 
    			<TableEnvoi_Enr IDENV="1" IDPRO="9" Ville="Drancy" Document="propal1275.doc" /> 
    			<TableEnvoi_Enr IDPRO="8" Ville="Marseille" Document="propal1874.doc" /> 
    		</TableEnvoi> 
    	</Envois> 
    </Ventes>
    transform.xsl:
    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
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" media-type="text/xml; charset=ISO-8859-1"/>
     
       <xsl:template match="/"> 
           <xsl:apply-templates /> 
       </xsl:template> 
     
       <xsl:template match="Ventes|Clients|TableClient|TableClient/*|@*"> 
          <xsl:copy> 
             <xsl:apply-templates select="@*|node()"/> 
             <xsl:apply-templates select="document('sourceB.xml')//TableClient_Enr[@IDCLI=current()/@IDCLI and @IDGROUP=current()/@IDGROUP][1]/@*"/> 
          </xsl:copy> 
       </xsl:template> 
     
       <xsl:template match="Ventes|Prospects|TableProspect|TableProspect/*|@*"> 
          <xsl:copy> 
             <xsl:apply-templates select="@*|node()"/> 
             <xsl:apply-templates select="document('sourceB.xml')//TableProspect_Enr[@IDPRO=current()/@IDPRO][1]/@*"/> 
          </xsl:copy> 
       </xsl:template> 
     
    	<!--c'est là mon PB -->
       <xsl:template match="Envois/*|@*"> 
          <xsl:copy> 
             <xsl:apply-templates select="document('sourceB.xml')//TableEnvoi_Enr/@*|node()"/> 
          </xsl:copy> 
       </xsl:template> 	
    </xsl:stylesheet>
    de manière à 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
     
      <?xml version="1.0" encoding="UTF-16" ?> 
      <Ventes Vendeur="Durant" Ordi="Station4" Date="24/05/2004 11:49:58">
      <Clients>
    	<TableClient>
    		<TableClient_Enr IDCLI="1" IDGROUP="AAB" Nom="Durant" Prenom="Paul" Ville="Paris" Telephone="0142434445" /> 
    		<TableClient_Enr IDCLI="2" IDGROUP="BBJ" Nom="Sausset" Prenom="Jacques" /> 
    		<TableClient_Enr IDCLI="3" IDGROUP="AAB" Nom="Brimare" Prenom="Pierre" Ville="Paris" Telephone="0145474951" /> 
    	</TableClient>
      </Clients>
      <Prospects>
    	<TableProspect>
    		<TableProspect_Enr IDPRO="7" Nom="Regient" Prenom="Arnaud" Ville="Lyon" Telephone="0455888899" /> 
    		<TableProspect_Enr IDPRO="8" Nom="Camus" Prenom="Laurent" Ville="Marseille" Telephone="0455887777" /> 
    		<TableProspect_Enr IDPRO="9" Nom="Frubert" Prenom="Luc" Ville="Drancy" Telephone="0140668888" /> 
    	</TableProspect>
      </Prospects>
      <Envois> 
    	<TableEnvoi> 
    		<TableEnvoi_Enr IDENV="1" IDPRO="9" Ville="Drancy" Document="propal1275.doc" /> 
    		<TableEnvoi_Enr IDPRO="8" Ville="Marseille" Document="propal1874.doc" /> 
    	</TableEnvoi> 
      </Envois> 
      </Ventes>
    et pas seulement ç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
     
      <?xml version="1.0" encoding="UTF-16" ?> 
      <Ventes Vendeur="Durant" Ordi="Station4" Date="24/05/2004 11:49:58">
      <Clients>
    	<TableClient>
    		<TableClient_Enr IDCLI="1" IDGROUP="AAB" Nom="Durant" Prenom="Paul" Ville="Paris" Telephone="0142434445" /> 
    		<TableClient_Enr IDCLI="2" IDGROUP="BBJ" Nom="Sausset" Prenom="Jacques" /> 
    		<TableClient_Enr IDCLI="3" IDGROUP="AAB" Nom="Brimare" Prenom="Pierre" Ville="Paris" Telephone="0145474951" /> 
    	</TableClient>
      </Clients>
      <Prospects>
    	<TableProspect>
    		<TableProspect_Enr IDPRO="7" Nom="Regient" Prenom="Arnaud" Ville="Lyon" Telephone="0455888899" /> 
    		<TableProspect_Enr IDPRO="8" Nom="Camus" Prenom="Laurent" Ville="Marseille" Telephone="0455887777" /> 
    		<TableProspect_Enr IDPRO="9" Nom="Frubert" Prenom="Luc" Ville="Drancy" Telephone="0140668888" /> 
    	</TableProspect>
      </Prospects>
      </Ventes>
    Bon, je réessaye, j'aimerais bien y arriver aussi...
    Ca, GF me l'avait écrit ("Si j'y arrive, tout le monde peut y arriver")
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  13. #13
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut Pas réussi...
    Bonjour,

    Bien, j'ai des résultats mais pas ceux que j'attends...
    J'ai du mal à entrevoir la façon dont est parcouru le XSL au niveau des apply-templates...
    Au dernier essai, j'obteint une fuxion des données communes entre chaque entité de noeuds (client - prospects - envois) et mon xml de retour m'envoie uniquement les données qui matchent entre elles...
    Je n'arrive pas à mettre fin à une règle et en commencer une autre.
    Pas doué, le gars, hein...
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  14. #14
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Bien, c'est en trichant que j'arrive à mes fins et en plus, pas de façon élégante.
    Pour rappel, j'ai 2 fichiers xml (voir le post suivant: "Posté le: Mer Mai 26, 2004 16:43 Sujet du message: Aie aie aie...") ayant pour point commun des attributs faisant office de clés primaires dans ma DB.
    Le fic1.xml fait référence à mon xsl qui va matcher les données de fic2.xml et sortir un fichier xml final.
    Le problème, c'est que le fichier fic2.xml contient 1 entité d'informations absolument absente de fic1.xml et pourtant je voudrais ces infos soient fusionnées dans leur totalité dans mon fichier final.

    En trichant et en inversant les règles ça marche mais c'est du bidouillage...
    Voilà mon nouveau xsl...
    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
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" media-type="text/xml; charset=ISO-8859-1"/>
     
    	<xsl:template match="/">
    		<xsl:apply-templates select="document('sourceB.xml')/*" /> 
    	</xsl:template>
     
    	<xsl:template match="Ventes|Envois|TableEnvoi|TableEnvoi/*|@*"> 
    		<xsl:copy> 
    			<xsl:apply-templates select="@*"/> 
    			<xsl:apply-templates select="document('sourceB.xml')//TableEnvoi_Enr/@*|node()"/> 
    		</xsl:copy> 
    	</xsl:template> 	
     
       <xsl:template match="/"> 
           <xsl:apply-templates /> 
       </xsl:template> 
     
       <xsl:template match="Ventes|Clients|TableClient|TableClient/*|@*"> 
          <xsl:copy> 
             <xsl:apply-templates select="@*|node()"/> 
             <xsl:apply-templates select="document('sourceB.xml')//TableClient_Enr[@IDCLI=current()/@IDCLI and @IDGROUP=current()/@IDGROUP][1]/@*"/> 
          </xsl:copy> 
       </xsl:template> 
     
    	<xsl:template match="Ventes|Prospects|TableProspect|TableProspect/*|@*"> 
    		<xsl:copy> 
    			<xsl:apply-templates select="@*|node()"/> 
    			<xsl:apply-templates select="document('sourceB.xml')//TableProspect_Enr[@IDPRO=current()/@IDPRO][1]/@*"/> 
    		</xsl:copy> 
    	</xsl:template> 
     
    </xsl:stylesheet>
    et j'ai été contraint pour que ça marche de modifier fic1.xml comme 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
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <?xml-stylesheet type="text/xsl" href="transform.xsl"?>
     
    <Ventes Vendeur="Durant" Ordi="Station4" Date="24/05/2004 11:49:58">
    	<Clients> 
    		<TableClient> 
    			<TableClient_Enr IDCLI="1" IDGROUP="AAB" Nom="Durant" Prenom="Paul" /> 
    			<TableClient_Enr IDCLI="2" IDGROUP="BBJ"  Nom="Sausset" Prenom="Jacques" /> 
    			<TableClient_Enr IDCLI="3" IDGROUP="AAB"  Nom="Brimare" Prenom="Pierre" /> 
    		</TableClient> 
    	</Clients> 
    	<Prospects> 
    		<TableProspect> 
    			<TableProspect_Enr IDPRO="7" Nom="Regient" Prenom="Arnaud" /> 
    			<TableProspect_Enr IDPRO="8" Nom="Camus" Prenom="Laurent" /> 
    			<TableProspect_Enr IDPRO="9" Nom="Frubert" Prenom="Luc" /> 
    		</TableProspect> 
    	</Prospects> 
    	<Envois> 
    		<TableEnvoi> 
    			<TableEnvoi_Enr IDENV="1"  /> 
    			<TableEnvoi_Enr IDENV="8" /> 
    		</TableEnvoi> 
    	</Envois> 
    </Ventes>
    Si vous avez une idée...
    Merci
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  15. #15
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    j'ai du sans doute louper quelque chose, mais pourquoi ne fais-tu pas simplement une copie des éléments qui te manquent ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:copy-of select="document('fic2.xml')//TableEnvoi"/>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  16. #16
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut
    Bonjour GrandFather,

    Bien merci pour cette suggestion...
    Mais avec ce bloc là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	<xsl:template match="Ventes|Envois|TableEnvoi|TableEnvoi/*|@*"> 
    			<xsl:copy-of select="document('sourceB.xml')//TableEnvoi"/>
    	</xsl:template> 
     
    </xsl:stylesheet>
    bien que greffé dans l'XSL ci-avant en lieu et place de ce que j'ai écrit, j'obtiens cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="UTF-16" ?> 
    <TableEnvoi>
      <TableEnvoi_Enr IDENV="11" IDPRO="9" Document="propal1275.doc" /> 
      <TableEnvoi_Enr IDENV="10" IDPRO="8" Document="propal1874.doc" /> 
    </TableEnvoi>
    et moi, je voudrais obtenir cela
    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
     
    <?xml version="1.0" encoding="UTF-16" ?> 
    <Ventes Vendeur="Durant" Ordi="Station4" Date="24/05/2004 11:49:58">
    	<Clients>
    		<TableClient>
    			<TableClient_Enr IDCLI="1" IDGROUP="AAB" Nom="Durant" Prenom="Paul" Ville="Paris" Telephone="0142434445" /> 
    			<TableClient_Enr IDCLI="2" IDGROUP="BBF" Nom="Sausset" Prenom="Jacques" Ville="Rouen" Telephone="0333445566" /> 
    			<TableClient_Enr IDCLI="3" IDGROUP="AAB" Nom="Brimare" Prenom="Pierre" Ville="Paris" Telephone="0145474951" /> 
    		</TableClient>
    	</Clients>
    	<Prospects>
    		<TableProspect>
    			<TableProspect_Enr IDPRO="7" Nom="Regient" Prenom="Arnaud" Ville="Lyon" Telephone="0455888899" /> 
    			<TableProspect_Enr IDPRO="8" Nom="Camus" Prenom="Laurent" Ville="Marseille" Telephone="0455887777" /> 
    			<TableProspect_Enr IDPRO="9" Nom="Frubert" Prenom="Luc" Ville="Drancy" Telephone="0140668888" /> 
    		</TableProspect>
    	</Prospects>
    	<Envois>
    		<TableEnvoi>
    			<TableEnvoi_Enr IDENV="11" IDPRO="9" Document="propal1275.doc" /> 
    			<TableEnvoi_Enr IDENV="10" IDPRO="8" Document="propal1874.doc" /> 
    		</TableEnvoi>
    	</Envois>
    </Ventes>
    Donc, c'est pour cela que la seule solution que j'ai trouvé, c'est de copier le noeud "Envois" et ses clés primaires dans le fic1.xml et matcher avec le XSL le fic2.xml avec les XPath dont tu m'as donné la syntaxe en début de post. C'est tricher mais je n'ai pas trouvé autre chose car comme je l'ai écris ci-avant, les règles "Clients" et "Prospect" influent de façon incompréhensible pour moi sur la règle "Envois".

    Si tu as une idée...

    A+

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  17. #17
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut Récapitulatif:
    Bien, le post a été nettoyé ce qui fait que l'historique n'est plus visible/

    Je redonne mes fichiers sources:

    fic1.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
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <?xml-stylesheet type="text/xsl" href="transform.xsl"?>
     
    <Ventes Vendeur="Durant" Ordi="Station4" Date="24/05/2004 11:49:58">
    	<Clients> 
    		<TableClient> 
    			<TableClient_Enr IDCLI="1" IDGROUP="AAB" Nom="Durant" Prenom="Paul" /> 
    			<TableClient_Enr IDCLI="2" IDGROUP="BBF"  Nom="Sausset" Prenom="Jacques" /> 
    			<TableClient_Enr IDCLI="3" IDGROUP="AAB"  Nom="Brimare" Prenom="Pierre" /> 
    		</TableClient> 
    	</Clients> 
    	<Prospects> 
    		<TableProspect> 
    			<TableProspect_Enr IDPRO="7" Nom="Regient" Prenom="Arnaud" /> 
    			<TableProspect_Enr IDPRO="8" Nom="Camus" Prenom="Laurent" /> 
    			<TableProspect_Enr IDPRO="9" Nom="Frubert" Prenom="Luc" /> 
    		</TableProspect> 
    	</Prospects> 
     
    </Ventes>
    fic2.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
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <Ventes Vendeur="Dupont" Ordi="Station5" Date="25/05/2004 11:18:25">
    	<Clients> 
    		<TableClient> 
    			<TableClient_Enr IDCLI="1" IDGROUP="AAB" Ville="Paris" Telephone="0142434445" /> 
    			<TableClient_Enr IDCLI="2" IDGROUP="BBF" Ville="Rouen" Telephone="0333445566" /> 
    			<TableClient_Enr IDCLI="3" IDGROUP="AAB" Ville="Paris" Telephone="0145474951" /> 
    		</TableClient> 
    	</Clients> 
    	<Prospects> 
    		<TableProspect> 
    			<TableProspect_Enr IDPRO="7" Ville="Lyon" Telephone="0455888899" /> 
    			<TableProspect_Enr IDPRO="8" Ville="Marseille" Telephone="0455887777" /> 
    			<TableProspect_Enr IDPRO="9" Ville="Drancy" Telephone="0140668888" /> 
    		</TableProspect> 
    	</Prospects> 
    	<Envois> 
    		<TableEnvoi> 
    			<TableEnvoi_Enr IDENV="11" IDPRO="9" Document="propal1275.doc" /> 
    			<TableEnvoi_Enr IDENV="10" IDPRO="8" Document="propal1874.doc" /> 
    		</TableEnvoi> 
    	</Envois> 
    </Ventes>
    transform.xsl
    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
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" media-type="text/xml; charset=ISO-8859-1"/>
     
     
       <xsl:template match="/"> 
           <xsl:apply-templates /> 
       </xsl:template> 
     
       <xsl:template match="Ventes|Clients|TableClient|TableClient/*|@*"> 
          <xsl:copy> 
             <xsl:apply-templates select="@*|node()"/> 
             <xsl:apply-templates select="document('sourceB.xml')/Ventes/Clients/TableClient/TableClient_Enr[@IDCLI=current()/@IDCLI and @IDGROUP=current()/@IDGROUP][1]/@*"/> 
          </xsl:copy> 
       </xsl:template> 
     
    	<xsl:template match="Ventes|Prospects|TableProspect|TableProspect/*|@*"> 
    		<xsl:copy> 
    			<xsl:apply-templates select="@*|node()"/> 
    			<xsl:apply-templates select="document('sourceB.xml')/Ventes/Prospects/TableProspect/TableProspect_Enr[@IDPRO=current()/@IDPRO][1]/@*"/> 
    		</xsl:copy> 
    	</xsl:template> 
     
    	<xsl:template match="Ventes|Envois|TableEnvoi|TableEnvoi/*|@*"> 
    		<xsl:copy> 
    			<xsl:apply-templates select="@*|node()"/> 
    			<xsl:apply-templates select="document('sourceB.xml')/Ventes/Envois/TableEnvoi/TableEnvoi_Enr[@IDENV=current()/@IDENV][1]/@*"/> 
    		</xsl:copy> 
    	</xsl:template> 	
     
    </xsl:stylesheet>
    But: Obtenir la fusion totale des deux xml pour obtenir le résultat tel qu'expliqué dans le post précédent de ce jour.

    Merci[/code]
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  18. #18
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    je crois qu'une petite révision du rôle et du fonctionnement des templates XSL ne serait pas un luxe. Je te renvoie sur les tutoriaux. Pour ton problème particulier, tu as déjà en fait tous les éléments de réponse. Voici la solution :
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="xml" indent="yes"/>
     
    <xsl:template match="/">
      <xsl:apply-templates select="Ventes"/>
    </xsl:template>
     
     
    <xsl:template match="Ventes">
      <xsl:copy>
        <xsl:copy-of select="@*"/>  
        <xsl:apply-templates select="Clients"/>
        <xsl:apply-templates select="Prospects"/>
        <xsl:copy-of select="document('fic2.xml')/Ventes/Envois"/>
      </xsl:copy>
    </xsl:template>
     
    <xsl:template match="Clients">
      <xsl:copy>
        <xsl:apply-templates select="TableClient"/>
      </xsl:copy>
    </xsl:template>
     
    <xsl:template match="TableClient">
      <xsl:copy>
        <xsl:apply-templates select="TableClient_Enr"/>
      </xsl:copy>
    </xsl:template>
     
    <xsl:template match="TableClient_Enr">
      <xsl:copy>
        <xsl:copy-of select="@*"/>
    	<xsl:copy-of select="document('fic2.xml')//TableClient_Enr[@IDCLI=current()/@IDCLI and @IDGROUP=current()/@IDGROUP][1]/@*"/>
      </xsl:copy>
    </xsl:template>
     
    <xsl:template match="Prospects">
      <xsl:copy>
        <xsl:apply-templates select="TableProspect"/>
      </xsl:copy>
    </xsl:template>
     
    <xsl:template match="TableProspect">
      <xsl:copy>
        <xsl:apply-templates select="TableProspect_Enr"/>
      </xsl:copy>
    </xsl:template>
     
    <xsl:template match="TableProspect_Enr">
      <xsl:copy>
        <xsl:copy-of select="@*"/>
    	<xsl:copy-of select="document('fic2.xml')//TableProspect_Enr[@IDPRO=current()/@IDPRO][1]/@*"/>
      </xsl:copy>
    </xsl:template>
     
     
    </xsl:stylesheet>
    Si ca nécessite une explication, y'a qu'à demander
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  19. #19
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut En effet...
    Bonjour GrandFather,

    Bien, effectivement, je sais que j'ai besoin d'un brieffing à ce propos.
    Mais en fait, malgré des efforts, je n'en suis qu'au stade primaire en matière de compréhension du cheminement et du fonctionnement du XSL.
    Je suis très procédural dans mes écrits de code et là, c'est pas le panard pour s'y adapter.
    Je me suis imprimé quelques docs et je vais postasser si je trouve un peu de temps car j'en ai perdu pas mal et je dois trimer pour finir le projet en temps et en heure.

    En tout cas, je te remercie pour toute ton aide.

    @+

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 66
    Par défaut
    Salut à tous,
    Je me permet d'intervenir car j'aussi un petit souci sur la fusion de deux fichiers xml pour en créer un autre contenant l'ensemble de deux autres.

    Voici mon premier fichier: navigator-clirr-result.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
     
    <?xml version="1.0"?>
    <diffreport>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected long getExpirationTime()">Method 'protected long getExpirationTime()' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected mhepg.platform.util.MonoThreadTimer getNextTimer()">Method 'protected mhepg.platform.util.MonoThreadTimer getNextTimer()' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected boolean getRunning()">Method 'protected boolean getRunning()' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected void setExpirationTime(long)">Method 'protected void setExpirationTime(long)' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected void setNextTimer(mhepg.platform.util.MonoThreadTimer)">Method 'protected void setNextTimer(mhepg.platform.util.MonoThreadTimer)' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected void setRunning(boolean)">Method 'protected void setRunning(boolean)' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.ProgramEventManager">Class mhepg.platform.util.ProgramEventManager added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.boot.BootManager">Class mhepgp.platform.boot.BootManager added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.boot.BootProcess">Class mhepgp.platform.boot.BootProcess added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.boot.BootProcessManager">Class mhepgp.platform.boot.BootProcessManager added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.util.DefaultProgramEventManager">Class mhepgp.platform.util.DefaultProgramEventManager added</difference>
    </diffreport>

    et mon deuxième fichier: release-notes
    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
    87
    88
    89
    90
     
    <?xml version="1.0" encoding="UTF-8"?>
    <release-note>
    	<date>
    		2011-04-22
    	</date>
    	<info>
    <module-name>epg-core</module-name>
    <module-version>1.6-SNAPSHOT</module-version>
    <build-context>
    <mvm-version>1.0.72</mvm-version>
    <msc-version>MHAP-1.0.61-2</msc-version>
    <xapi-version>MHAP-1.0.28-1</xapi-version>
    </build-context>
    		<baseline-compare baseline="EPG_CORE_20110422112406" previous="EPG_CORE_1.5"/>
    	</info>
    	<tasks>
    		<task>
    			<id>
    				PRD_FR#6670
    			</id>
    			<release>
    				EPG_CORE/MAIN
    			</release>
    			<completed>
    				2011-04-21
    			</completed>
    			<resolver>
    				fdagosti
    			</resolver>
    			<synopsis>
    				add ErrorModel in Core
    			</synopsis>
    			<description>
    				The ErrorModel framework is now added in Epg_core
    			</description>
    			<pcrs/>
    			<objects>
    				<object>
    					<name>
    						ErrorMessage.java
    					</name>
    					<version>
    						1
    					</version>
    				</object>
    				<object>
    					<name>
    						ErrorModel.java
    					</name>
    					<version>
    						1
    					</version>
    				</object>
    				<object>
    					<name>
    						MessageEvent.java
    					</name>
    					<version>
    						1
    					</version>
    				</object>
    				<object>
    					<name>
    						error
    					</name>
    					<version>
    						1
    					</version>
    				</object>
    				<object>
    					<name>
    						platform
    					</name>
    					<version>
    						4
    					</version>
    				</object>
    				<object>
    					<name>
    						stb
    					</name>
    					<version>
    						1
    					</version>
    				</object>
    			</objects>
    		</task>
    	</tasks>
    </release-note>
    et voici le code pour la fusion de deux fichiers en un seul:
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" media-type="text/xml; charset=ISO-8859-1"/>
     
    <xsl:template match="/">
    		<diffreport>
    			<difference>
     
    					<xsl:apply-templates select="diffreport/difference"/>
    			</difference>
    		</diffreport>
     
    	</xsl:template>
     
    <xsl:template match="difference">
        <xsl:copy>
    	    <xsl:copy-of select="@*"/>
    		<xsl:copy-of select="document('navigator-clirr-result.xml')/@*"/>
    	</xsl:copy>
    </xsl:template>
     
     
    </xsl:stylesheet>
    et cela me donne ce genre de résultat:
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <diffreport>
    <difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected long getExpirationTime()">Method 'protected long getExpirationTime()' has been added</difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected mhepg.platform.util.MonoThreadTimer getNextTimer()">Method 'protected mhepg.platform.util.MonoThreadTimer getNextTimer()' has been added</difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected boolean getRunning()">Method 'protected boolean getRunning()' has been added</difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected void setExpirationTime(long)">Method 'protected void setExpirationTime(long)' has been added</difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected void setNextTimer(mhepg.platform.util.MonoThreadTimer)">Method 'protected void setNextTimer(mhepg.platform.util.MonoThreadTimer)' has been added</difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected void setRunning(boolean)">Method 'protected void setRunning(boolean)' has been added</difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.ProgramEventManager">Class mhepg.platform.util.ProgramEventManager added</difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.boot.BootManager">Class mhepgp.platform.boot.BootManager added</difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.boot.BootProcess">Class mhepgp.platform.boot.BootProcess added</difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.boot.BootProcessManager">Class mhepgp.platform.boot.BootProcessManager added</difference>
    <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.util.DefaultProgramEventManager">Class mhepgp.platform.util.DefaultProgramEventManager added</difference>
    </difference>
    </diffreport>
    Donc il écrase les infos du release-notes.xml et les remplacent par celles du navigator-clirr-result.xml.

    Du coup je m'aimerai avoir un résultat comme:
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    <?xml version="1.0"?>
    <diffreport>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected long getExpirationTime()">Method 'protected long getExpirationTime()' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected mhepg.platform.util.MonoThreadTimer getNextTimer()">Method 'protected mhepg.platform.util.MonoThreadTimer getNextTimer()' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected boolean getRunning()">Method 'protected boolean getRunning()' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected void setExpirationTime(long)">Method 'protected void setExpirationTime(long)' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected void setNextTimer(mhepg.platform.util.MonoThreadTimer)">Method 'protected void setNextTimer(mhepg.platform.util.MonoThreadTimer)' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.MonoThreadTimer" method="protected void setRunning(boolean)">Method 'protected void setRunning(boolean)' has been added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepg.platform.util.ProgramEventManager">Class mhepg.platform.util.ProgramEventManager added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.boot.BootManager">Class mhepgp.platform.boot.BootManager added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.boot.BootProcess">Class mhepgp.platform.boot.BootProcess added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.boot.BootProcessManager">Class mhepgp.platform.boot.BootProcessManager added</difference>
      <difference binseverity="INFO" srcseverity="INFO" class="mhepgp.platform.util.DefaultProgramEventManager">Class mhepgp.platform.util.DefaultProgramEventManager added</difference>
    </diffreport>
     
    <release-note>
    	<date>
    		2011-04-22
    	</date>
    	<info>
    <module-name>epg-core</module-name>
    <module-version>1.6-SNAPSHOT</module-version>
    <build-context>
    <mvm-version>1.0.72</mvm-version>
    <msc-version>MHAP-1.0.61-2</msc-version>
    <xapi-version>MHAP-1.0.28-1</xapi-version>
    </build-context>
    		<baseline-compare baseline="EPG_CORE_20110422112406" previous="EPG_CORE_1.5"/>
    	</info>
    	<tasks>
    		<task>
    			<id>
    				PRD_FR#6670
    			</id>
    			<release>
    				EPG_CORE/MAIN
    			</release>
    			<completed>
    				2011-04-21
    			</completed>
    			<resolver>
    				fdagosti
    			</resolver>
    			<synopsis>
    				add ErrorModel in Core
    			</synopsis>
    			<description>
    				The ErrorModel framework is now added in Epg_core
    			</description>
    			<pcrs/>
    			<objects>
    				<object>
    					<name>
    						ErrorMessage.java
    					</name>
    					<version>
    						1
    					</version>
    				</object>
    				<object>
    					<name>
    						ErrorModel.java
    					</name>
    					<version>
    						1
    					</version>
    				</object>
    				<object>
    					<name>
    						MessageEvent.java
    					</name>
    					<version>
    						1
    					</version>
    				</object>
    				<object>
    					<name>
    						error
    					</name>
    					<version>
    						1
    					</version>
    				</object>
    				<object>
    					<name>
    						platform
    					</name>
    					<version>
    						4
    					</version>
    				</object>
    				<object>
    					<name>
    						stb
    					</name>
    					<version>
    						1
    					</version>
    				</object>
    			</objects>
    		</task>
    	</tasks>
    </release-note>
    Merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/05/2009, 14h05
  2. [XSL-FO] [Débutant] xml, xsl, fo fop pdf ...ahhh !
    Par enigma dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2005, 09h14
  3. [XSL] Parser fichier xml : erreurs + incompréhensions
    Par totobouchon dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/07/2005, 15h47
  4. [XML][XSL][FOP] transformation xml avec fop
    Par Le Marlou dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 05/12/2003, 16h58

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