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

BODI Discussion :

BO Data Integrator : Transformer CSV vers XML


Sujet :

BODI

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut BO Data Integrator : Transformer CSV vers XML
    Bonjour,

    Pouvez-vous me dire comment générer un fichier XML à partir d'un fichier plat en entrée ?? J'utilise la version 11.5.

    Merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Mai 2006
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte Décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 363
    Points : 521
    Points
    521
    Par défaut
    il faut que tu fasses un fichier XSL décrivant la structure de ton fichier XML

    Ensuite tu crées un job qui contient un dataflow qui prend en entrée ton fichier CSV (précédement créé sous forme de format) et qui fais un mapping (avec l'objet Query) vers ton fichier XML

    Tu ne peux pas générer un XML sans en avoir décrit la structure avant

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Concernant le XSL, tu veux parler d'un fichier XSD (ou XML Schema) ? Car si c'est une XSD, c'est bon elle est créée.

    Pour ce qui est du fichier CSV en entrée et de l'objet Query, c'est ok également.

    J'arrive à générer un fichier XML qui ne correspond pas du tout au nombre de valeurs que j'ai en entrée (une sorte de produit cartésien XML!!!).

    Comme mon XML a plusieurs niveaux, dois-je mettre autant de fois mon fichier source en entrée pour réaliser le mapping ? En fait, je n'arrive pas à voir comment réaliser le mapping entre mon fichier plat et le XML.

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Mai 2006
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte Décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 363
    Points : 521
    Points
    521
    Par défaut
    Effectivement je parlais de XSD

    Par contre, je ne comprends pas vraiment ton problème, si tu mets plusieurs fois ton fichier en entrée sans rien mettre dans une clause "Where", tu auras effectivement un produit cartésien

    Le fichier XML peut poser des problèmes du fait de la vision "hiérarchique" du fichier, mais tu n'as besoin que d'un fichier en entrée, le mapping est simplement un peu complexe, il faut prendre le focus sur le bon niveau de ton noeud puis faire ton mapping, puis passer au noeud précédent

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour tes conseils, j'ai effectivement réalisé le mapping avec un seul fichier en entrée. Mais le résultat n'est toujours pas celui attendu. Il ne prend pas du tout en compte la hiérarchie du fichier XML. Il répète les données autant de fois qu'elles sont présentes dans le fichier pour chaque Tag. J'ai 10 lignes dans mon fichier CSV avec logiquement 1 seule valeur pour le tag du 1er niveau et je me retrouve en sortie avec 10 éléments identiques de 1er niveau (et le même type de répétition pour les autres niveaux).

    J'ai essayé avec une DTD et là je me retrouve en sortie avec 1 seul niveau et le tag contient la concaténation des 10 valeurs de mon champ cible !

    J'ai la version 11.5 de BODI, n'est-elle pas buguée pour la génération des XMLs ?
    Car je retourne le problème dans tous les sens et toujours rien de concluant.
    Le traitement ne semble pas si complexe que ça, juste une transformation. J'ai bien mappé mes champs et rempli le "From" pour l'ensemble des niveaux. Faut-il faire autre chose, car là je sèche ....

  6. #6
    Membre confirmé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Mai 2006
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte Décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 363
    Points : 521
    Points
    521
    Par défaut
    D'après les tests que j'ai pu faire (je n'utilise pas de fichiers XML en général)

    Tu dois avoir un fichier cible de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <racine>
       <element>
          <info1>truc</info1>
          <info2>machin</info2>
       </element>
       <element>
          <info1>chose</info1>
          <info2>bidule</info2>
       </element>
    </racine>
    ce qui revient à avoir dans ton mapping quelque chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Query
       element
          info1
             Texte
          info2
             Texte
    D'après ce que j'ai pu voir, quand tu mets le focus sur "Info1", il ne te met pas le schéma source


    En fait, c'est du au fait que, pour Data Integrator, chaque niveau de ton fichier XML est géré indépendamment des autres

    La solution que j'ai trouvé, mais elle peut ne pas s'appliquer à ton exemple est de modifier la structure de ton fichier XML de façon à n'avoir qu'un élément en dessous de la racine et que tes informations soient stockées sous formes d'attributs dans ton élément
    ce qui te donnerait un fichier cible de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <racine>
       <element info1='truc' info2='machin'/>
       <element info1='chose' info2='bidule'/>
    </racine>
    L'autre solution est de générer une table temporaire comprenant la même hiérarchie que ce que tu utilises sur ton fichier cible

    Pour ce que j'ai pu lire dans les docs de formation éditeur, BODI n'est pas vraiment conçu pour écrire des fichiers XML, il sait les lire et ça suffit dans la plupart des cas

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    En effet, la solution de modifier la structure du fichier de sortie n'est pas vraiment adéquate .

    Pour ta solution de passer par une table temporaire, tu veux en venir où ? Car j'ai essayé de passer par des tables mais je bloque toujours lors de la génération de mon XML cible.
    Soit DI me génère un XML avec un seul niveau (pourquoi ???). Il s'arrête dès le 1er niveau.
    Au mieux, j'ai réussi à obtenir une structure basique avec 1 valeur par tag et par niveau avec un "Template XML" et un "Row Generation" (exemple trouvé sur le forum BOB).

    Je pense que je vais finir par repasser par du bon vieux code pour générer mon arbre XML ... On avez espoir d'utiliser l'ETL pour éviter le code et profiter de sa maniabilité, mais à priori notre XML est un peu compliqué pour BODI.

  8. #8
    Membre confirmé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Mai 2006
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte Décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 363
    Points : 521
    Points
    521
    Par défaut
    L'idée que j'avais en tête était de recréer ta hiérarchisation dans une table temporaire.

    en découpant tes données, tu devrais pouvoir recréer la hiérarchie de ton fichier xml dans des tables intermédiaires, il te suffirait ensuite de copier ta table construite dans ton fichier XML.

    Par contre, il est nécessaire que le SGBD que tu utilises gère les nested tables pour permettre ce genre de choses (SQL-Server 2005 ne le fait pas).

    Je suis désolé de ne pas pouvoir t'aider beaucoup plus, mais je n'utilise pas du tout BODI de cette façon, et visiblement, il n'a pas été pensé pour le faire non plus .

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Sto59 Voir le message
    je retourne le problème dans tous les sens et toujours rien de concluant.
    Le traitement ne semble pas si complexe que ça, juste une transformation. J'ai bien mappé mes champs et rempli le "From" pour l'ensemble des niveaux. Faut-il faire autre chose, car là je sèche ....
    J'ai aussi eu ce probleme de produit cartesien dans mes xml, avec BODI et j'ai galéré pour trouver la solution, le post date un peu mais ca pourra tjr servir à d'autres:

    Il faut simplement ne pas mettre dans les "from" de niveau inferieurs la table parente et bien faire les jointures avec elle dans les tables fils ex:

    une table "element" et une table "info" que l'on souhaite imbriquer:
    Dans le niveau "element" remplir le "from" normalement et rien ds le where.
    Dans le niveau "info" juste mettre la table "info" dans le from, et mettre dans le where la jointure entre "element" et "info".

    (J'avais plusieurs tables et pas un seul fichier, il faut donc dans ce cas, peut etre eclater au prealable le fichier csv en une table "element" et une "info" avec un id vers "element")

Discussions similaires

  1. [Débutant] CSV vers XML !
    Par Rockit72 dans le forum VB.NET
    Réponses: 5
    Dernier message: 15/01/2012, 20h06
  2. Réponses: 4
    Dernier message: 05/05/2011, 14h24
  3. BO Data Integrator 6.5 vers Reporting BO XI R2
    Par Momo07800 dans le forum BODI
    Réponses: 1
    Dernier message: 12/05/2010, 14h13
  4. [transformation]ASCII vers XML
    Par bleporini dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 19/06/2008, 15h23
  5. Transformation HTML vers XML
    Par pocahontaos dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 23/01/2006, 23h14

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