Ludovic ROLAND

Blog technique sur mes expériences de développeur.

Talend Open Studio for Data Integration : Convertissez vos données Excel en XML

1er novembre 2012

Puisque les articles que j’ai écrits sur Talend Open Studio for Data Integration sont parmi les plus lus, je vous en propose un troisième.

Pour rappel, le premier était une introduction à la reprise de données tandis que le second abordait l’externalisation des contextes.

Dans ce nouvel article, je vous propose de voir comment convertir des données contenues dans deux fichiers Excel en un document XML.

Les documents Excel

Notre premier document Excel portera le nom couleurs.xls. Ce premier document contiendra deux colonnes. La première sera un identifiant tandis que la seconde sera le nom de la couleur correspondant à l’identifiant.

Voici son contenu :

Identifiant Couleur
C1 Bleu
C2 Vert
C3 Noir
C4 Orange
C5 Jaune
C6 Gris
C7 Rouge
C8 Rose
C9 Blanc
C10 Or

Notre deuxième document Excel portera le nom objets.xls. Il contient trois colonnes. La première est un identifiant, la seconde est le nom de l’objet tandis que la dernière est le code couleur de l’objet (il fait référence au document couleurs.xls).

Identifiant Nom Code couleur
O1 Voiture C6
O1 Scooter C3
O1 Télévision C9
O1 Pantalon C3
O1 Guitare C10
O1 Stylo C6
O1 Téléphone C8
O1 Skate C2
O1 Appareil photo C1
O1 Chaise C5

Le résultat attendu

Le but est de fusionner les données contenues dans les deux documents Excel afin d’obtenir un fichier XML qui soit valide au Schéma XML suivant :

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <!-- ROOT TAG -->
    <xsd:element name="objets" type="t_objets" />

    <!-- OBJETS TAG -->
    <xsd:complexType name="t_objets">
        <xsd:sequence>
	    <xsd:element name="objet" type="t_objet" maxOccurs="unbounded" />
        </xsd:sequence>
    </xsd:complexType>

    <!-- OBJET TAG -->
    <xsd:complexType name="t_objet">
        <xsd:sequence>
            <xsd:element name="nom" type="xsd:string" />
            <xsd:element name="couleur" type="xsd:string" />
        </xsd:sequence>

        <xsd:attribute name="identifiant" type="xsd:string" use="required" />
    </xsd:complexType>
</xsd:schema>

En d’autres termes, le document XML attendu ressemblera à ça :

<objets	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="objetsXMLSchema.xsd">

	<objet identifiant="O1">
	    <nom>Voiture</nom>
	    <couleur>Gris</couleur>
	  </objet>

	  <objet identifiant="O2">
	    <nom>Scooter</nom>
	    <couleur>Noir</couleur>
	  </objet>

</objets>

Le projet Talend

Création des fichiers Excel

Une fois le nouveau projet créé dans Talend, rendez-vous dans les Métadonnées pour créer des objets tFileInputExcel qui contiendront les données de nos fichiers couleurs.xls et objets.xls.

Un clic droit sur Fichier Excel vous permet de créer un nouveau fichier. Quatre étapes doivent alors être faites.

Dans la première, saisissez le nom (par exemple «objets» pour le fichier objets.xls) que vous souhaitez donner au tFileInputExcel puis cliquez sur suivant.

La seconde étape consiste à dire à Talend où se trouve le fichier Excel sur votre machine. Vous pouvez également dire quelles sont les feuilles à considérer dans le document fraîchement importé. Dans notre cas, seule la feuille 1 nous intéresse.

La troisième étape consiste à indiquer à Talend l’encodage du fichier et si celui-ci contient un header (nom des colonnes) ou uniquement des données exploitables. Un aperçu des données est également disponible.

La quatrième et dernière étape consiste à mettre à jour le schéma. Dans notre cas, ça consiste à indiquer que les champs Identifiant et Code_couleur sont des clefs. Ça nous servira un peu plus tard pour faire une jointure avec le second document Excel.

Reproduisez ces quatre étapes pour le fichier couleurs.xls.

Création du fichier XML

Comme pour les fichiers Excel, c’est au niveau des Métadonnées du projet que nous allons créer notre fichier XML de sortie via le composant tAdvancedFileOutputXML.

Un clic droit sur Fichier XML vous permet de créer un nouveau fichier. Ce coup-ci, c’est cinq étapes qui doivent être faites.

Dans la première, saisissez le nom (par exemple «out» pour le fichier out.xml) que vous souhaitez donner au tAdvancedFileOutputXML puis cliquez sur suivant.

La seconde étape consiste à indiquer si le fichier XML est un fichier d’entrée ou de sortie. Dans notre cas, il s’agit d’un fichier de sortie. Une fois le bon choix sélectionné, cliquez sur suivant pour passer à l’étape n°3.

La troisième étape consiste à créer le schéma du fichier XML. Nous pouvons soit le créer à la main, soit tenter de le créer automatiquement à l’aide d’un fichier de définition xsd par exemple. Puisque nous en avons créé un, il serait dommage de s’en priver. Sélectionner donc «Create from a file» dans la partie «output Setting» et sélectionnez votre fichier xsd.

Une fenêtre vous demande alors d’indiquer l’élément racine. Dans notre cas, il s’agit de l’élément objets. Choisissez ensuite votre encodage puis indiquer où est-ce que vous souhaitez placer votre fichier de sortie.

La quatrième étape consiste à vérifier que les différents éléments de notre schéma pointent bien vers les éléments de notre fichier XML. Nous devons également indiquer le ou les éléments qui requièrent une boucle. Dans notre cas, seul l’élément «objet» a besoin d’une boucle. Nous allons donc l’indiquer via un clic droit puis en sélectionnant «set as loop element«.

Le statut du nœud devrait alors s’être mis à jour comme dans la capture d’écran ci-dessous :

Finalement, la dernière étape consiste à éventuellement modifier le schéma. Dans notre cas, ça ne sera pas nécessaire.

Le job

Il est maintenant temps de passer à la pratique !

Commencez par créer un nouveau job et faites y glisser les deux fichiers Excel et le fichier XML depuis les méta-données. Ajoutez y un tMap et reliez le tout !

Les composants tFileInputExcel doivent pointer en entrée du tMap tandis que la sortie de ce dernier pointe vers l’entrée le composant tAdvancedFileOutputXML. N’oubliez pas de récupérer le schéma du composant cible lorsqu’on vous le demande !

Finalement, placez un tLogRow entre le tMap et le tAdvancedFileOutputXML pour qu’on puisse voir les données qui transitent.

Voici alors ce que vous devriez avoir :

Il ne nous reste plus qu’à créer les jointures. Pour ce faire, double-cliquez sur le tMap.

Voici comment relier les différents éléments entre eux :

Finalement, il ne nous reste plus qu’à exécuter le job. Le tLogRow devrait alors vous afficher la trace suivante :

Vérifiez tout de même que le fichier XML correspond bien à vos attentes !

Commentaires