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+ :wink:
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:
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...
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:
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:
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:
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.
Re: Ah, j'ai une tite question
Salut
Citation:
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]
Citation:
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:
<xsl:copy-of select="document('fic2.xml')//TableClient_Enr[@IDCLI=current()/@IDCLI and @IDGROUP=current()/@IDGROUP][1]/@*"/>