Shell, générer fichier xml à partir de base de données oracle
Decon
Messages postés
91
Date d'inscription
Statut
Membre
Dernière intervention
-
Decon Messages postés 91 Date d'inscription Statut Membre Dernière intervention -
Decon Messages postés 91 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
La question en elle même est simple.
Je souhaite générer un fichier xml à partir d'une base de données oracle via un script shell.
En gros dans mon shell, je me connecte à la bd oracle, récupère les données et alimente suivant la structure de mon xml ses différents champs.
Exemple de structure du fichier xml:
Merci d'avance.
La question en elle même est simple.
Je souhaite générer un fichier xml à partir d'une base de données oracle via un script shell.
En gros dans mon shell, je me connecte à la bd oracle, récupère les données et alimente suivant la structure de mon xml ses différents champs.
Exemple de structure du fichier xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<cible>
<liste>
<ligne>Champ1 ligne 1</ligne>
<ligne>Champ1 ligne 2</ligne>
<ligne>Champ1 ligne 3</ligne>
<!--...-->
<!--...-->
</liste>
</cible>
<GO>
<seq>1</seq>
<Op>
<seq>2</seq>
<toto>
<action>M</action>
<PN>champ3</PN>
<IC>champ4</IC>
<St>
<statut>blabla2</statut>
</St>
<At>
<IdA>Val1 passée en param au script shell</IdA>
<VS>Val2 passée en param au script shell</VS>
<Ac>S</Ac>
</At>
</toto>
</Op>
</GO>
Merci d'avance.
A voir également:
- Shell, générer fichier xml à partir de base de données oracle
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Classic shell - Télécharger - Personnalisation
3 réponses
Salut,
Ce sont les seules valeurs à changer dans ton fichier xml ?
A quoi ressemble tes données récupérées depuis la base de données ?
<IdA>Val1 passée en param au script shell</IdA>
<VS>Val2 passée en param au script shell</VS>
Ce sont les seules valeurs à changer dans ton fichier xml ?
A quoi ressemble tes données récupérées depuis la base de données ?
Non,
Là je n'ai mis que quelques un à titre d'exemple.
Je pense que les données en elles même ne sont pas importantes, vu que je débrouille pour ne récupérer que celles dont j'ai besoin.
Val1 passée en param au script shellsont des valeurs que je passe en paramètre à mon script shell. Elles me permettront par la suite de modifier d'autres valeurs. Mais là n'est pour l'instant pas la question.
ChampXsont les données que je récupère en base. Elles sont de type string.
Là je n'ai mis que quelques un à titre d'exemple.
Je pense que les données en elles même ne sont pas importantes, vu que je débrouille pour ne récupérer que celles dont j'ai besoin.
Ok.
Pour ce genre de truc, j'ai l'habitude de générer un fichier template, avec les des valeurs nominatives, qui me sert à générer le fichier final en opérant des substitutions sur les valeurs.
Exemple :
Pour ce genre de truc, j'ai l'habitude de générer un fichier template, avec les des valeurs nominatives, qui me sert à générer le fichier final en opérant des substitutions sur les valeurs.
Exemple :
$ cat template.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<cible>
<liste>
<ligne>Champ1 ligne 1</ligne>
<ligne>Champ1 ligne 2</ligne>
<ligne>Champ1 ligne 3</ligne>
<!--...-->
<!--...-->
</liste>
</cible>
<GO>
<seq>1</seq>
<Op>
<seq>2</seq>
<toto>
<action>M</action>
<PN>champ3</PN>
<IC>champ4</IC>
<St>
<statut>blabla2</statut>
</St>
<At>
<IdA>Val1 passée en param au script shell</IdA>
<VS>Val2 passée en param au script shell</VS>
<Ac>S</Ac>
</At>
</toto>
</Op>
</GO>
$ sed 's/Champ1/VAR1/;s/champ3/VAR3/;s/champ4/VAR4/' template.xml > final.xml
$ cat final.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<cible>
<liste>
<ligne>VAR1 ligne 1</ligne>
<ligne>VAR1 ligne 2</ligne>
<ligne>VAR1 ligne 3</ligne>
<!--...-->
<!--...-->
</liste>
</cible>
<GO>
<seq>1</seq>
<Op>
<seq>2</seq>
<toto>
<action>M</action>
<PN>VAR3</PN>
<IC>VAR4</IC>
<St>
<statut>blabla2</statut>
</St>
<At>
<IdA>Val1 passée en param au script shell</IdA>
<VS>Val2 passée en param au script shell</VS>
<Ac>S</Ac>
</At>
</toto>
</Op>
</GO>
Je crois qu'un sed ne suffira pas pour ce que je veux faire.
Soit ma requête:
Cette requête me retourne plusieurs lignes, d'où les
Ensuite, en fonction de la valeur du champ2, le bloc <toto> sera construit différemment.
Exemple:
Si champ2 = X
Alors bloc sous la forme:
Sinon si champ2 =Y
Alors bloc sous la forme:
Sinon
Autrement dit une boucle sur le résultat de la requête et un bloc <toto> différent suivant la valeur du champ2.
Merci d'avance.
Soit ma requête:
select champ1, champ2, ... champN from table where ...
Cette requête me retourne plusieurs lignes, d'où les
<liste>Ligne 1, 2, ..., N étant les numéro de ligne. Ce qui veut dire que le bloc <liste> contient les champs 1 de chaque ligne.
<ligne>Champ1 ligne 1</ligne>
<ligne>Champ1 ligne 2</ligne>
<ligne>Champ1 ligne 3</ligne>
<!--...-->
<!--...-->
</liste>
Ensuite, en fonction de la valeur du champ2, le bloc <toto> sera construit différemment.
Exemple:
Si champ2 = X
Alors bloc sous la forme:
<toto>
<action>M</action>
<PN>champ3</PN>
<IC>champ4</IC>
<St>
<statut>blabla2</statut>
</St>
<At>
<IdA>Val1 passée en param au script shell</IdA>
<VS>Val2 passée en param au script shell</VS>
<Ac>S</Ac>
</At>
</toto>
Sinon si champ2 =Y
Alors bloc sous la forme:
<toto>
<action>R</action>
<PN>champ3</PN>
<IC>champ4</IC>
<St>
<statut>blabla2</statut>
</St>
</toto>
Sinon
<toto>
<action>S</action>
<PN>champ3</PN>
<IC>champ4</IC>
<Stt>champ5</Stt>
<St>
<statut>blabla2</statut>
</St>
</toto>
Autrement dit une boucle sur le résultat de la requête et un bloc <toto> différent suivant la valeur du champ2.
Merci d'avance.