Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Talend
Talend Forum d'entraide sur Talend (Talend Open Studio, ...). Avant de poster --> FAQ Talend, Tutoriels Talend
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2010, 13h44   #1
Invité de passage
 
Inscription : février 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 18
Points : 1
Points : 1
Par défaut Fichier XML à structure variable

Bonjour,

Je souhaite générer un fichier XML dont la structure attendue est la suivante :

<catalog>
<product>
<field name="id">16</field>
<field name="sku">n2610</field>
<field name="category">8</field>
<field name="category">12</field>
<field name="category">18</field>

</product>
<product>
<field name="id">17</field>
<field name="sku">bb8100</field>
<field name="category">1</field>
<field name="category">18</field>

</product>
</catalog>

La difficulté que je rencontre concerne les champs "category". Un produit peut être attaché à plusieurs catégories. Je ne vois pas comment générer plusieurs lignes avec le même non d'attribut, en plus, sans connaître leur nombre de catégories au préalable.

En entrant, j'ai une table de jointure comportant 2 champs, l'identifiant produit et celui des catégories.

Avez vous une idée pour me débloquer ?

Merci d'avance.
sboussekeyt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 17h54   #2
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
Edit le schema de ton fichier xml



pour tester j'ai creer une table avec ID_PRODUCT,ID_CATEGORY dedans
je fais juste un select * de cet table

le mapping :


le job :


j'obtiens ce fichier xml :


C'est une solution que j'ai trouvé vite fait , il en existe surement des meilleurs
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/12/2010, 21h11   #3
Invité de passage
 
Inscription : février 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 18
Points : 1
Points : 1
Bonsoir kisskool,

Tout d'abord merci de m'avoir répondu. Je vois que tu as pris du temps pour me trouver une solution, c'est vraiment top

J'ai testé ta solution, ça fonctionne parfaitement, tu m'as fait gagner beaucoup de temps .

Bonne soirée, merci!!!
sboussekeyt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 13h39   #4
Invité de passage
 
Inscription : février 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 18
Points : 1
Points : 1
Grâce à kisskool, j'ai avancé sur mon projet.

Comme je l'ai dit, cette solution fonctionne parfaitement.

Néanmoins, dans ce flux je dois ajouter d'autres informations pour obternir la structure suivante :

<catalog>
<product>
<field name="id">16</field>
<field name="sku">n2610</field>
<field name="category">8</field>
<field name="category">12</field>
<field name="category">18</field>
<field name="feature_1">4 Go</field>
<field name="feature_2">3 kg</field>
<field name="feature_3">17 pouces</field>

</product>
<product>
<field name="id">17</field>
<field name="sku">bb8100</field>
<field name="category">1</field>
<field name="category">18</field>
<field name="feature_1">2 Go</field>
<field name="feature_2">3.2 kg</field>

</product>
</catalog>

En simplifiant le schéma, j'ai une table contenant le nom de la caractéristique, sa valeur et l'identifiant du produit.

Je dois donc procéder de la même manière que pour les catégories, mais dans le composant "AdvancedFileOutputXml", on ne peut faire qu'un regroupement et boucler dessus.

Quelqu'un a t-il une idée à proposer ?

Merci d'avance à tous.
sboussekeyt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 16h30   #5
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
En effet tu ne peux pas faire plusieurs loop sur talend,
j'ai une solution pour ton problème :

Tous tes input doivent être de la forme suivante :
ID_PRODUCT, field, type_field

tu relie tes input a un tUnite
Ensuite un tMap ou tu les relie au mapping de ton fichier xml

Pour le fichier xml on garde le meme schéma sauf que cet fois tu coche la case
Ecrire les données a la fin du fichier sources xml

Par contre l'inconvénient c que tu n'écrases plus le fichier il te faudra donc le supprimer avant tout cela avec tFileDelete (tu peux faire une copie avant si tu dois garder un historique)

Je te joins la doc du job que j'ai fais pour tester .
Fichiers attachés
Type de fichier : zip TestXml.zip (33,7 Ko, 3 affichages)
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/12/2010, 13h05   #6
Invité de passage
 
Inscription : février 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 18
Points : 1
Points : 1
Encore merci pour ton aide.

Je comprends le principe de ta solution.

Je vais tester et te faire un retour dès que possible.
sboussekeyt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 20h57   #7
Invité de passage
 
Inscription : février 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 18
Points : 1
Points : 1
kisskool45,

J'ai réussi à mettre ta solution en oeuvre. J'ai même réussi à le faire sans utiliser le tFileDelete.

Par contre, j'ai dû mettre le composant de tri pour ordonner la liste par "id_product" à la sortie du tUnit.

Cette solution me convient, mais je suis obligé d'avoir une entrée pour chaque champ, sur le composant tUnit. Comme j'en ai beaucoup, ça risque de ne plus être très lisible à terme.

N'y a t-il pas une solution pour convertir une liste de plusieurs champs en plusieurs ligne sous la forme "id_product, field, type_field" ?
sboussekeyt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h59.


 
 
 
 
Partenaires

Hébergement Web