Shell, générer fichier xml à partir de base de données oracle
Fermé
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
-
Modifié par Decon le 16/04/2014 à 10:15
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 - 17 avril 2014 à 17:46
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 - 17 avril 2014 à 17:46
A voir également:
- Shell, générer fichier xml à partir de base de données oracle
- Fichier rar - Guide
- Fichier host - Guide
- Fichier iso - Guide
- Formules excel de base - Guide
- Comment réduire la taille d'un fichier - Guide
3 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
16 avril 2014 à 10:37
16 avril 2014 à 10:37
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 ?
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
16 avril 2014 à 16:39
16 avril 2014 à 16:39
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.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
16 avril 2014 à 17:26
16 avril 2014 à 17:26
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>
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
17 avril 2014 à 16:13
17 avril 2014 à 16:13
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.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
17 avril 2014 à 16:57
17 avril 2014 à 16:57
Effectivement, ce n'est pas gagné ;-(
Donc, oui une boucle va s'imposer. À partir de là, construire plusieurs templates en fonction de tes besoins, et les appeler selon la valeur de ton champ, non ?
Donc, oui une boucle va s'imposer. À partir de là, construire plusieurs templates en fonction de tes besoins, et les appeler selon la valeur de ton champ, non ?
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
17 avril 2014 à 17:46
17 avril 2014 à 17:46
Oui