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

Shell et commandes GNU Discussion :

Modification d'un fichier XML à l'aide d'un script shell


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2018
    Messages : 9
    Par défaut Modification d'un fichier XML à l'aide d'un script shell
    Salut,
    J'ai un fichier XML qui ressemble à ça:

    <balise1>
    <balise2>
    <balise4>
    <nom>toto1<\nom>
    </balise4>
    </balise2>
    <balise3>
    <balise4>
    <nom>toto2<\nom>
    </balise4>
    </balise3>
    </balise1>

    Mon problème est que il faut que je puisse modifier le contenu de la balise <nom> dans le bloc de la <balise2>
    Je suis obligé de le faire dans un script shell.
    Merci d'avance

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2018
    Messages : 9
    Par défaut
    Merci de ta réponse.
    Le problème est que je ne peux pas télécharger de module ou autre sur cet environnement

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2018
    Messages : 9
    Par défaut
    J'ai également un début de solution mais c'est assez galère.
    Dans un premier temps, j'extrait le bloc que je veux modifier grâce à une commande sed. Puis ensuite, je modifie la valeur du bloc <name> puis je réinsère mon nouveau bloc dans le fichier d'origine.
    Toutefois, j'ai un problème au niveau de l'extraction. En effet, lorsque j'effectue ma commande sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat xml_file | sed -n "/<balise2>/,/<\/balise2>/p" | sed -n "/<balise4>/,/<\/balise4>/p"
    Celle ci marche lorsque je la tape en ligne de commande mais elle ne marche plus lorsque je la met dans le script shell. Il me met 'extra characters after command'.
    Si vous avez une solution à ce pb je suis preneur

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 348
    Par défaut
    Tu dois avoir une fin de ligne à la dos au lieu d'unix...

    Sinon, en un seul sed, changement ici dans l'exemple de toto1 en titi2 selon ton besoin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat /tmp/xxxml
    <balise1>
            <balise2>
                    <balise4>
                            <nom>toto1<\nom>
                    </balise4>
            </balise2>
            <balise3>
                    <balise4>
                            <nom>toto2<\nom>
                    </balise4>
            </balise3>
    </balise1>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ sed -n '/<balise2>/,/<\/balise2>/{N;s/\(<nom>\)[^<]*\(<\\nom>\)/\1titi1\2/};p' /tmp/xxxml
    <balise1>
            <balise2>
                    <balise4>
                            <nom>titi1<\nom>
                    </balise4>
            </balise2>
            <balise3>
                    <balise4>
                            <nom>toto2<\nom>
                    </balise4>
            </balise3>
    </balise1>

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2018
    Messages : 9
    Par défaut
    Merci disedorgue de ton aide ! Ta commande marche ! (Il y a juste une petite coquille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed -n '/<balise2>/,/<\/balise2>/{N;s/\(<nom>\)[^<]*\(<\/nom>\)/\1titi1\2/};p' /tmp/xxxml
    )
    Toutefois, j'aimerais comprendre le fonctionnement de ce que tu as mis dans l'accolade. En effet, j'aimerais le généraliser car j'ai un cas où ce schéma est répété à un niveau de profondeur supplémentaire (Ouais je travail sur un fichier xml vraiment compliqué haha)

    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
    $ 
    <balise1>
            <balise2>
                    <balise4>
                            <nom>titi1<\nom>
                            <prenoms>
                                            <prenom>Jean<\prenom>
                            <\prenoms>
                    </balise4>
            </balise2>
            <balise3>
                    <balise4>
                            <nom>toto2<\nom>
                            <prenoms>
                                            <prenom>Pierre<\prenom>
                            <\prenoms>
                    </balise4>
            </balise3>
    </balise1>
    Je veux juste modifier le prénom Jean en Michel dans la balise numéro 2
    Merci d'avance

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

Discussions similaires

  1. modification d'un fichier xml
    Par DanielW33 dans le forum ANT
    Réponses: 1
    Dernier message: 09/10/2006, 16h38
  2. [DOM XML] Modification d'un fichier XML en php
    Par aldo-tlse dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 07/07/2006, 18h28
  3. [xml/xsl/xhtml] modification d'un fichier XML
    Par florent_de_brest dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 25/05/2006, 20h43
  4. [c#] Modification d'un fichier XML
    Par topolino dans le forum Windows Forms
    Réponses: 13
    Dernier message: 21/03/2006, 14h51
  5. [DOM] Modification d'un fichier XML
    Par nana1 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 21/11/2005, 23h22

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