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

Unix Discussion :

Shell, générer fichier xml à partir de base de données oracle


Sujet :

Unix

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 87
    Points : 70
    Points
    70
    Par défaut Shell, générer fichier xml à partir de base de données oracle
    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:
    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
    <?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.

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    sur le principe il suffit de faire une extraction de donnée mise en fome et de remplacer les délimiteurs par les balises et c'est à peut près tout....

    un script sed peut te faire ça facilement
    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
     
    $ cat > titi
    | 100 | 2014-02-15 | 59.81 |  718 |
    | 101 | 2014-02-20 | 52.26 |  664 |
    | 102 | 2014-02-25 | 50.18 |  612 |
    $ 
    $ sed '1i\                                                                    
    >  <?xml version="1.0" encoding="ISO-8859-1"?>                                
    > 
    > s/|/<debutligne>/ ; s/|$/<finligne>/ ; s/ \(.*\) /    <col>\1<\/col>/ ; s/ | /<\/col><col>/g' titi 
     <?xml version="1.0" encoding="ISO-8859-1"?>
    <debutligne>    <col>100</col><col>2014-02-15</col><col>59.81</col><col> 718</col><finligne>
    <debutligne>    <col>101</col><col>2014-02-20</col><col>52.26</col><col> 664</col><finligne>
    <debutligne>    <col>102</col><col>2014-02-25</col><col>50.18</col><col> 612</col><finligne>
    $ rm titi
    pour le principe dans la réalité le code sera bien plus complexe pour prendre en compte toutes les possibilité de balises de tabulation de retour à la ligne et j'en passe....

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 87
    Points : 70
    Points
    70
    Par défaut
    J'essaye d'être un peu plus précis:

    Soit ma requête:
    <code>select champ1, champ2, ... champN from table where ...</code>
    Cette requête me retourne plusieurs lignes, d'où les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <liste>
      <ligne>Champ1 ligne 1</ligne>
      <ligne>Champ1 ligne 2</ligne>
      <ligne>Champ1 ligne 3</ligne>
      <!--...-->
      <!--...-->
     </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.

    Je souhaite en fonction de la valeur du champ2, construire différemment le bloc <toto>.

    Exemple:

    Si champ2 = X
    Alors bloc sous la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <toto>
    	   <action>R</action>
    	   <PN>champ3</PN>
    	   <IC>champ4</IC> 
       <St>
        <statut>blabla2</statut>
       </St>
    </toto>
    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <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.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 87
    Points : 70
    Points
    70
    Par défaut
    Personne?

  5. #5
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    salut

    bha tu es le seul à connaitre la structure de ta table et celle que tu attends à la sortie,
    donc je réitère ce que je disais au dessus il y a 2 methodes "simples"
    -extraire tes data dans un dump ou équivalant et le traiter comme un script de mise en forme
    -diriger directement le résultat d'une requette et l'intercepter par exemple dans un pipe avec le script de mise en forme.

    mon exemple utilises sed mais tu peux utiliser le langage que tu maitrises le mieux, le shell, ak, perl, sed .... peut importe....

    mais tu as tout le principe....

    injection des entetes xml, remplacement des separateurs par les balises ....et bien sur les conditionnements de saut de ligne et de tabulation....
    y'a que ça faut se lancer sur un "petit set de donnees test"

Discussions similaires

  1. Générer fichier XML d'après base de données sous Oracle
    Par dectroomeri dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 30/04/2015, 17h30
  2. intégrer les données d'un fichier XML dans une base de données Oracle 11
    Par pmboutteau dans le forum Persistance des données
    Réponses: 2
    Dernier message: 07/03/2014, 09h55
  3. génèrer un fichier php à partir de base de données
    Par nrandria dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/09/2008, 14h59
  4. générer fichier XML à partir d'une BD
    Par skyangel20 dans le forum XQUERY/SGBD
    Réponses: 2
    Dernier message: 22/05/2007, 11h31
  5. Réponses: 1
    Dernier message: 09/05/2006, 12h00

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