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

Linux Discussion :

[Script Shell] Insertion dans un fichier .xml


Sujet :

Linux

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut [Script Shell] Insertion dans un fichier .xml
    Bonjour à tous,

    Je suis nouveau en programmation de Script Shell, mais pas vraiment nouveau en programmation. J'ai besoin d'un petit coup de main.

    J'ai en fait besoin d'un script pour insérer des données dans un fichier xml.
    Je recherche une éxécution du type :

    script.sh monfichier.xml param1 param2

    Je voudrais simplement insérer des nouvelles données a la fin du fichier xml.

    J'ai absolument aucune connaissance en programmation de script shell, pourriez vous m'éclairer un peu ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Bonjour,

    un échantillon du fichier original ?
    la fin du fichier final, après traitement ?
    ce que tu as essayé ?

    non ?

    alors, il n'y a pas de quoi.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Bonjour,

    Nous sommes même prêts à commenter les commandes, c'est pour dire.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Mes excuses pour mon affreux manque de precisions.

    Voici un echantillon du fichier original :

    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
     
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
    - <FXDataMap name="Counterparty" application="FTL" businessDate="2011-02-11">
    - <counterpartymappings>
    - <counterpartymapping>
      <CounterPartyName>XXX</CounterPartyName> 
      <CounterPartyId>XXXX</CounterPartyId> 
    - <tpdests>
      <tpdest>XXX</tpdest> 
      <tpdest>XXX</tpdest> 
      </tpdests>
      </counterpartymapping>
    ...
    ...
    ...
    - <counterpartymapping>
      <CounterPartyName>XXX</CounterPartyName> 
      <CounterPartyId>XXX</CounterPartyId> 
    - <tpdests>
      <tpdest>XXX</tpdest> 
      </tpdests>
      </counterpartymapping>
      </counterpartymappings>
      </FXDataMap>

    Du coup, le but, vous le comprenez, c'est d'ajouter un nouveau client en renseignant son nom, son id et sa destination.

    Je crois qu'il s'agit donc de supprimer les deux dernieres lignes du fichier puis d'ajouter les informations du nouveau client avec les balises associees.

    Jusqu'a present, j'ai fait ceci :

    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
     
     
    #! /usr/bin/ksh 
     
    #Supprime les deux dernieres lignes
    cat counterparty.xml |sed '$d' | sed ' w counterparty.xml' > temp
    cat counterparty.xml |sed '$d' | sed ' w counterparty.xml' > temp
     
    #Ajoute les informations du client
    echo "<counterpartymapping>" >> counterparty.xml
    echo "<CounterPartyName>$1</CounterPartyName>" >> counterparty.xml
    echo "<CounterPartyId>$2</CounterPartyId>" >> counterparty.xml
    echo "<tpdests>" >> counterparty.xml
    echo "<tpdest>$3</tpdest>" >> counterparty.xml
    echo "</tpdests>" >> counterparty.xml
    echo "</counterpartymapping>" >> counterparty.xml
    echo "</counterpartymappings>" >> counterparty.xml
    echo "</FXDataMap>" >> counterparty.xml
    Quelque chose m'echappe, la commande "cat counterparty.xml |sed '$d' | sed ' w counterparty.xml' " semble supprimer plus que la derniere ligne. Cependant j'ai teste cette commande sur plusieurs fichiers .txt et ca fonctionnais parfaitement. J'en deduis que le cas du .xml se traite differement...

    Je debute completement en script et en xml, veuillez m'excuser pour toutes les betises que j'ai du dire...!

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Bonjour,

    un fichier xml est un fichier texte normal.

    tu devrais plutôt utiliser un motif :
    supprimer depuis la fin de la balise 'counterpartymappings', jusquà la fin du fichier, puis
    ajouter les nouvelles données

    n'utilise pas cat pour faire lire un fichier à sed : sed sait lire les fichiers
    évite de piper des commandes sed entre elles
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    En suivant vos conseil, j'arrive a ceci :

    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
     
     
    #! /usr/bin/ksh 
     
    #Renvoie le numero de la ligne de "</counterpartymappings>" 
    numero_ligne=grep -n "</counterpartymappings>" counterparty.xml | sed -n 's/^\([0-9]*\)[:].*/\1/p'
     
    #Supprime les lignes qui suivent la ligne "numero_ligne"
    sed -n -e :a -e '1,$numero_ligne!{P;N;D;};N;ba' counterparty.xml > d.xml
     
    echo "<counterpartymapping>" >> d.xml
    echo "<CounterPartyName>$1</CounterPartyName>" >> d.xml
    echo "<CounterPartyId>$2</CounterPartyId>" >> d.xml
    echo "<tpdests>" >> d.xml
    echo "<tpdest>$3</tpdest>" >> d.xml
    echo "</tpdests>" >> d.xml
    echo "</counterpartymapping>" >> .xml
    echo "</counterpartymappings>" >> d.xml
    echo "</FXDataMap>" >> d.xml
     
    cp d.xml counterparty.xml
    Cependant, la suppression ne fonctionne pas... est-ce l'affectation de la variable "numero_ligne" qui coince ou la commande de suppression ?

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    en fait, tu n'as pas besoin du numéro de ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    cat <<EOF>d.xml
    $(sed '/<\/counterpartymappings/,$d'  counterparty.xml)
    <counterpartymapping>
    <CounterPartyName>$1</CounterPartyName>
    <CounterPartyId>$2</CounterPartyId>
    <tpdests>
    <tpdest>$3</tpdest>
    </tpdests>
    </counterpartymapping>
    </counterpartymappings>
    </FXDataMap>
    EOF
    cp d.xml counterparty.xml
    pourquoi faire compliqué ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci de votre reponse.

    Cependant, lorsque j'execute votre code avec comme parametre a, b,c, un cat counterparty.xml me donne


    $(sed '/<\/counterpartymappings/,' counterparty.xml)
    <counterpartymapping>
    <CounterPartyName>a</CounterPartyName>
    <CounterPartyId>b</CounterPartyId>
    <tpdests>
    <tpdest>c</tpdest>
    </tpdests>
    </counterpartymapping>
    </counterpartymappings>
    </FXDataMap>

    J'ai du mal a comprendre pourquoi il y a l'ajout de la commande "sh addcounterparty.sh a b c" et pourquoi toutes les lignes de counterparty.xml avant </counterpartymappings> sont supprimees. Pouvez-vous m'eclairez un peu ?

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    bof, tu as dû te planter en recopiant. Ici, ça marche très bien.

    NB: si tu veux que le script soit exécuté par ksh, ne le lance sous sh.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Effectivement, je m'etais trompe.
    Merci beaucoup pour votre aide, j'apprecie beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script Shell pour construire des fichiers XML
    Par yanis97 dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 22/03/2010, 10h30
  2. Script shell - écriture dans un fichier
    Par Leishmaniose dans le forum Linux
    Réponses: 6
    Dernier message: 13/12/2004, 22h48
  3. Réponses: 2
    Dernier message: 01/06/2004, 12h47
  4. Insertion dans un fichier xml à partir d'un xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/03/2003, 09h45
  5. Insertion dans un fichier XML
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/02/2003, 17h16

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