|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mars 2003 Messages : 5 ![]() |
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. |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Consultant en Business Intelligence Inscription : mai 2006 Messages : 276 ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mars 2003 Messages : 5 ![]() |
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. |
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Consultant en Business Intelligence Inscription : mai 2006 Messages : 276 ![]() |
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 |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mars 2003 Messages : 5 ![]() |
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 .... |
|
|
00
|
|
|
#6 | ||||||
|
Membre éclairé
![]() Consultant en Business Intelligence Inscription : mai 2006 Messages : 276 ![]() |
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 :
Code :
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 :
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 |
||||||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mars 2003 Messages : 5 ![]() |
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. |
|
|
00
|
|
|
#8 |
|
Membre éclairé
![]() Consultant en Business Intelligence Inscription : mai 2006 Messages : 276 ![]() |
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 |
|
|
00
|
|
|
#9 | |
|
Invité de passage
![]() Inscription : octobre 2007 Messages : 6 ![]() |
Citation:
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") |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com