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

Développement de jobs Discussion :

Parcourir un XML et stocker dans plusieurs tables d'une BDD


Sujet :

Développement de jobs

  1. #1
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut Parcourir un XML et stocker dans plusieurs tables d'une BDD
    Bonjour à tous

    J'ai besoin de parcourir un XML et de descendre l'intégralité de son contenu dans une BDD, le tout avec Talend.

    Le XML ressemble à ç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
    19
    20
    21
    22
    23
    <Root>
    	<IdRoot>0001</IdRoot>
    		<AttributeRoot1>123456789</AttributeRoot1>
    		<Level1>
    			<IdLevel1>A0001</IdLevel1>
    			<Attribute1>azerty</Attribute1>
    			<Level2>
    				<IdLevel2>AA-BB</IdLevel2>
    				<Attribute2>qsdfgh</Attribute2>
    			</Level2>
    			<Level3Lists>
    				<Level3>X</Level3>
    				<Level3>Y</Level3>
    				<Level3>Z</Level3>
    			</Level3Lists>
    		</Level1>
    		<Level1>
    		…
    		</Level1>
    		<Level1>
    		…
    		</Level1>
    </Root>
    Donc
    • pas d'ID unique des noeuds,
    • potentiellement plusieurs noeuds au même niveau sans possibilité de les différencier sauf à aller lire leur ID fonctionnel 1 niveau plus bas


    Mon objectif est de descendre tout ça dans 3 tables:

    Root
    - ID_Root (ID technique calculé par une séquence)
    -AttributeRoot1 (récupéré dans le XML)

    Level1
    - ID_Level1 (ID technique calculé par une séquence)
    - ID_Root (pour rattacher 1 ligne de Level1 à 1 ligne de Root)
    - Attribute1 (récupéré dans le XML)

    Level2
    - ID_Level2 (ID technique calculé par une séquence)
    - ID_Level1 (pour rattacher 1 ligne de Level2 à son père dans Level1)
    - Attribute2 (récupéré dans le XML)

    Level3
    - ID_Level3 (ID technique calculé par une séquence)
    - ID_Level2 (pour rattacher 1 ligne de Level3 à son père dans Level2)
    - Attribute3 (récupéré dans le XML, mais n'est pas taggé en tant que tel dans le XML)

    Est-ce que quelqu'un aurait des pistes sur la façon de faire ça ?

    Merci beaucoup

    Version: 5.4.0

    Ps : on est 2 sur le sujet, je débute sous Talend mais l'autre est plus expérimenté (mais il ne sait pas faire ça).
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  2. #2
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Est ce que tu peux poster un exemple de fichier 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)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Points : 97
    Points
    97
    Par défaut
    J'ai la même problématique avec le textractxmlfield voici le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    <test-list>
     
    <test dictionary="IATE:fourn" ref="BBB"/>
     
    <test ref="4201" source="iate"/>
     
    </test-list>

  4. #4
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Citation Envoyé par haskouse Voir le message
    Est ce que tu peux poster un exemple de fichier XML.
    Voilà en texte et en attaché.

    Merci beaucoup

    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" standalone="yes"?>
    <Root xmlns="DTS">
    	<IdRoot>0001</IdRoot>
    		<AttributeRoot1>123456789</AttributeRoot1>
    		<Level1>
    			<IdLevel1>A0001</IdLevel1>
    			<Attribute1>azerty</Attribute1>
    			<Level2>
    				<IdLevel2>AA-BB</IdLevel2>
    				<Attribute2>qsdfgh</Attribute2>
    				<Level3Lists>
    					<Level3>X</Level3>
    					<Level3>Y</Level3>
    					<Level3>Z</Level3>
    				</Level3Lists>
    			</Level2>
    		</Level1>
    		<Level1>
    			<IdLevel1>A0002</IdLevel1>
    			<Attribute1>Test</Attribute1>
    			<Level2>
    				<IdLevel2>XX-YY</IdLevel2>
    				<Attribute2>wcbn</Attribute2>
    			</Level2>
    		</Level1>
    		<Level1>
    			<IdLevel1>A0003</IdLevel1>
    			<Attribute1>dummy</Attribute1>
    		</Level1>
    </Root>
    Fichiers attachés Fichiers attachés
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  5. #5
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Bon j'ai deux questions :
    1 - Est ce que level1 existe toujours ?
    2 - Est ce que un level1 peut contenir plusieurs level2 ou bien toujours un seul ?
    "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)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  6. #6
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Voilà comment j'aurais fait personnellement. (cf. job pièce jointe)
    Fichiers attachés Fichiers attachés
    "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)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Points : 97
    Points
    97
    Par défaut
    N'y a t il pas une expression xpath à mettre dans le metadata pour effectuer cette tâche ?

  8. #8
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Non un Level1 n'existe pas toujours, il peut très bien y avoir seulement la racine.

    Oui il peut y avoir plusieurs Level2 pour 1 Level1.

    J'ai regardé le xpath mais j'avoue que j'atteint rapidement mes limites.


    Merci pour l'exemple, je regarde
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  9. #9
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Est ce que tu peux envoyer un fichier XML avec les deux cas de figures suivants :
    1 - un root sans level1.
    2 - un level1 avec plusieurs level2.
    3 - plusieurs root dans le même fichier.
    "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)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  10. #10
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Voilà:
    Test 01.xml : seulement 1 root
    Test 02.xml : 2 Level2 pour 1 Level1

    Par contre il ne doit pas y avoir plusieurs root dans 1 seul fichier, ça me semble non conforme au standard XML.

    J'ai regardé ton exemple et il correspond pas mal à ce que j'espérais pouvoir faire, tout en ne sachant pas comment le faire. Si j'ai bien compris, tu utilises les identifiants fonctionnel des niveaux pour conserver un lien. Mais dans ce cas je n'ai pas compris comment tu as fait pour que les lignes de Level3 soient bien associées à la bonne ligne de Level2.

    Merci
    Fichiers attachés Fichiers attachés
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  11. #11
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Je pense avoir trouvé une meilleur solution.
    Regarde le job joint, je pense qu'il correspond mieux à tes besoins.

    Le première partie fait l'extraction des balises, la deuxième fait l'affichage. L'extraction se fait tout en gardant un lien entre les différents niveaux.

    Root lié à rien, ce qui est normal.
    Level1 lié à Root.
    Level2 lié à Level1.
    Level3 lié à Level2.

    La liaison se fait bien sûr avec ce que tu appelles "les identifiants fonctionnel des niveaux". Je te laisse le soin de générer les séquences et de modifier les liens avec les identifiants générés, mais c'est facile.
    Fichiers attachés Fichiers attachés
    "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)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  12. #12
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Formidable, j'aime beaucoup.

    On décortique et si on trouve un problème on relance le sujet, en attendant je mets en résolu.

    Merci encore
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/01/2013, 22h27
  2. Réponses: 2
    Dernier message: 03/05/2008, 13h34
  3. Réponses: 9
    Dernier message: 28/08/2007, 10h38
  4. Import XML dans plusieurs tables
    Par fbe66 dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 05/08/2006, 15h55
  5. Réponses: 4
    Dernier message: 08/06/2006, 20h06

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