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 19/08/2011, 11h12   #1
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Par défaut Remplacer les caractères spéciaux dans xml

Bonjour,

Je débute avec Talend Open Studio 4 et j'ai créé un process qui lit un fichier excel de propriétés que j'exporte après mapping dans un fichier XML. Pour cela, j'utilise les composants tXMLMap et tAdvancedFileOutputXML.


Je voudrais lors du mapping ou de l'écriture que les caractères spéciaux contenus dans le fichier excel soient remplacés.
J'ai vu la fonction TalendString.replaceSpecialCharForXml ou String.ereplace mais j'aimerais une fonction qui encode directement en code html les caractères spéciaux.

Exemple :
j'ai une valeur dans le fichier excel avec des accents : "Cycle contrôlé"
et je veux : "Cycle contrôlé"

Ci-joint mon process.

Merci d'avance pour l'aide ! J'ai beau chercher je vois pas...
Images attachées
Type de fichier : jpg exportProcess_ETL.JPG (18,0 Ko, 8 affichages)
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 11h23   #2
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Bonjour,

Je te conseille de faire, en éspérant que tu t'y connaisses un peu en java, c'est de créer ta fonction toi même : une fonction à laquelle tu passes une chaîne de caractère xml et te retourne une chaîne de caractère en html. Il se peut même que tu retrouves cette fonction déjà créée par quelqu'un sur internet.

Après avoir créée cette fonction tu la mets dans une routine Talend, pour cela je te renvoie vers ce tutoriel expliquant pas à pas comment réaliser ceci :

http://haskouse.developpez.com/tutor...ation-routine/

Bonne chance.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/08/2011, 11h30   #3
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Bonjour Haskouse et merci.

Je m'y connais en Java oui mais pas encore dans l'environnement Talend.
Je suppose qu'on appeler la fonction dont je parlais directement dedans, non ?
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 11h46   #4
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Après la création de ta routine et ta fonction tu pourras faire l'appel à l'intérieur du tMap comme ceci :

Code :
routines.maroutine.mafonction(row1.maColonneAtransformer)
Tout ceci est bien expliqué dans le tuto, je te conseille d'y jeter un coup d'oeil.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 12h21   #5
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
J'utilise dans ma nouvelle routine un appel à EREPLACE.

Tout bêtement, je fais
Code :
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
 
package routines;
import routines.StringHandling;
 
public class RemoveSpecialChars {
 
    /**
     * Remove special chars from a string
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} custo
     * 
     * {param} string= input: The string to be cleaned from special chars
     * 
     * {example} helloExemple("world") # hello world !.
     */
    public static String removeSpecialChars(String str) {      
 
        String str_res = StringHandling.EREPLACE(str, "é", "é");
        str_res = StringHandling.EREPLACE(str_res, "è", "&eagrave;");
        str_res = StringHandling.EREPLACE(str_res, "à", "à");
        str_res = StringHandling.EREPLACE(str_res, "ù", "ù");
        str_res = StringHandling.EREPLACE(str_res, "ô", "ô");
        str_res = StringHandling.EREPLACE(str_res, "î", "î");
        str_res = StringHandling.EREPLACE(str_res, "ï", "ï");
        str_res = StringHandling.EREPLACE(str_res, "ç", "ç");
 
        /*TODO : if new pattern, add simply a new line according to template:
         *     str_res = StringHandling.EREPLACE(str_res, "<special char>", "<html special encoding>");
         */
 
        RETURN str_res;
 
    }
 
}
et j'obtiens :
Code :
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
 
<?xml version="1.0" encoding="ISO-8859-15"?>
 
<Properties>
  <LCM ID="LCM_TypeDocument">
    <Default>Document simple</Default>
    <Valeurs>
      <Valeur>Manuel Utilisateur</Valeur>
      <Valeur>Cahier des charges</Valeur>
      <Valeur>Document simple</Valeur>
    </Valeurs>
  </LCM>
  <LCM ID="LCM_TypeActivity">
    <DEFAULT/>
    <Valeurs>
      <Valeur>Calcul</Valeur>
      <Valeur>Essai</Valeur>
      <Valeur>Expertise</Valeur>
    </Valeurs>
  </LCM>
  <LCM ID="LCM_Cycle">
    <Default>Cycle court</Default>
    <Valeurs>
      <Valeur>Cycle court</Valeur>
      <Valeur>Cycle contr&amp;ocirc;l&amp;eacute;</Valeur>
      <Valeur>Existe</Valeur>
    </Valeurs>
  </LCM>
</Properties>
Donc mon remplacement de caractère spécial est pourri


EDIT: Après analyse, c'est le composant d'écriture du XML qui fait ce changement. Je ne sais pas comment paramétrer cela...
Images attachées
Type de fichier : jpg Mapping.JPG (137,3 Ko, 4 affichages)
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 12h40   #6
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Je n'arrive pas à voir où est le problème, j'ai l'impression que ton fichier de sortie est bon !! non ?
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 13h20   #7
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Mon fichier n'est pas bon car j'attends:
Code :
1
2
3
4
5
6
7
8
9
 
<LCM ID="LCM_Cycle">
    <Default>Cycle court</Default>
    <Valeurs>
      <Valeur>Cycle court</Valeur>
      <Valeur>Cycle contr&ocirc;l&eacute;</Valeur>
      <Valeur>Existe</Valeur>
    </Valeurs>
  </LCM>
et j'obtiens
Code :
1
2
3
4
5
6
7
8
<LCM ID="LCM_Cycle">
    <Default>Cycle court</Default>
    <Valeurs>
      <Valeur>Cycle court</Valeur>
      <Valeur>Cycle contr&amp;ocirc;l&amp;eacute;</Valeur>
      <Valeur>Existe</Valeur>
    </Valeurs>
  </LCM>
Après analyse, c'est le composant d'écriture du XML qui fait ce changement. Je ne sais pas comment paramétrer cela...
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 15h44   #8
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Salut,

Je ne suis pas sûr de ma réponse mais c'est peut être à cause de l'encodage que tu utilises.

Essaie de modifier la propriété "encodage" dans les paramètres avancés de ta sortie XML.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 08h57   #9
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
J'ai essayé mais rien à faire. Cela ne concerne que le caractère "&" d'après mes observations. Je pense que l'origine du problème est dans le composant tAdvancedFileOutputXML.
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 09h34   #10
Membre extrêmement actif
 
Avatar de jojodu31
 
Inscription : mars 2008
Messages : 870
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2008
Messages : 870
Points : 733
Points : 733
Salut,
j'ai parcouru le sujet vite fait mais je te conseille de te tourner vers la classe StringEscapeUtils d'apache. Je l'avais utilisé et ça marchait pas mal, il doit y avoir des méthodes pour le HTML.
__________________
Heureux soient les fêlés, car ils laisseront passer la lumière.

Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
jojodu31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 16h19   #11
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Salut jojodu31 (toulousain ?)

Tu procèderais comment ? Custo du composant tAdvancedFileOutputXML ?
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 16h27   #12
Membre extrêmement actif
 
Avatar de jojodu31
 
Inscription : mars 2008
Messages : 870
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2008
Messages : 870
Points : 733
Points : 733
Salut! Toulousain oui

Pas de custo op op op ! A mon avis il te suffit de faire le traitement dans la tMap avant de donner la valeur à mettre dans le XML.
Tu intègres un code comme ça et ça devrait être bon :

Code :
1
2
 
StringEscapeUtils.escapeHtml("Cycle contrôlé"); // affiche bien ce que tu veux
__________________
Heureux soient les fêlés, car ils laisseront passer la lumière.

Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
jojodu31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 10h11   #13
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Ok merci

Mais j'ai observé que quand j'écris dans le XML, la chaîne &eacute; par exemple devient &amp;eacute;.

Donc, le composant d'écriture est foiré. Je me sens bon pour le réécrire...
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 10h08   #14
Invité de passage
 
Inscription : octobre 2011
Messages : 1
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 1
Points : 1
Points : 1
Par défaut Une solution

Bonjour,
Avez vous trouvé une solution à votre problème, je me retrouve dans le même cas.
Merci pour votre retour,
Anaf
anafmrf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 09h53   #15
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Bonjour,

Ma solution a été d'écrire avec les caractères spéciaux non traduits.
Puis dans un composant tSystem, je fais une commande PERL pour chaque caractère à remplacer. :
Code :
perl -pi.orig -e "s/pattern/repl/g" fichier.xml
C'est fastidieux !
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h19.


 
 
 
 
Partenaires

Hébergement Web