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 :

Découpage fichier XML


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 55
    Par défaut Découpage fichier XML
    Bonjour,

    Je post ici car j'ai un problème pour "découper" un fichier xml.

    Voici le fichier xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Message xmlns="http://www.test.com/">    <Identification>        <TypeMessage>TEST</TypeMessage>        <Version>1.0</Version>    </Identification>    <Begin>        <Content>            <PleinDeBalises>ICI</PleinDeBalises>               </Content>    </Begin></Message>
    Je n'ai pas identé volontairement car le fichier xml est bel et bien sur une seule et unique ligne.

    Je souhaiterais découper le fichier pour garder uniquement ce qu'il y a entre les balises "Begin", c'est à dire obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Content>            <PleinDeBalises>ICI</PleinDeBalises>               </Content>
    J'ai pas mal recherché sur internet du coté de sed, awk, csplit...etc mais j'avoue être un peu en galere Ce que j'ai trouvé de plus proche de mon problème est ce lien : "http://doc.ubuntu-fr.org/sed" mais je voudrais rechercher de maniere très précise avec "<Begin>" et "</Begin>".

    Est ce que quelqu'un pourrais me donner une piste à suivre? Ou mieux la bonne commande?

    Merci d'avance.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Au choix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ cat plop 
    <Message xmlns="http://www.test.com/"> <Identification> <TypeMessage>TEST</TypeMessage> <Version>1.0</Version> </Identification> <Begin> <Content> <PleinDeBalises>ICI</PleinDeBalises> </Content> </Begin></Message>
     
    $ sed 's#.*<Begin> \(.*\) </Begin>.*#\1#' plop 
    <Content> <PleinDeBalises>ICI</PleinDeBalises> </Content>
     
    $ grep -Po '.*<Begin> \K.*(?=</Begin>)' plop 
    <Content> <PleinDeBalises>ICI</PleinDeBalises> </Content>

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    Bonjour,

    le format des fichiers XML pouvant varier, je prône pour leur traitement l'emploi d'outils ad'hoc : xsltproc, xmlstarlet...,
    la lecture des tutoriels, et l'usage du forum dédié.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    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 352
    Par défaut
    Bonjour,

    Je suis d'accord avec N_BaH, mais pour le fun voici une version awk et une autre version sed:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk -F"</?Begin>" '{print $2}' plop
            <Content>            <PleinDeBalises>ICI</PleinDeBalises>               </Content>
    $ sed 's#.*<\(Begin>\)\(.*\)</\1.*#\2#' plop
            <Content>            <PleinDeBalises>ICI</PleinDeBalises>               </Content>
    Bonne Année 2015

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 55
    Par défaut
    Merci pour votre aide.

    Zipe 31 :

    La commande avec grep ne fonctionne pas avec mon environnement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -Po '.*<Begin> \K.*(?=</Begin>)' plop
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grep: illegal option -- P
    grep: illegal option -- o
    Usage: grep -hblcnsviw pattern file . . .
    La commande avec sed fonctionne uniquement si j'utilise le code dans ton message (avec un seul espace entre les balises) mais pas avec le code original (plusieurs espaces entre les balises).

    disedorgue :

    La commande awk :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F"</?Begin>" '{print $2}' plop
    Me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Message xmlns="http://www.test.com/">
    Idem que Zipe31 : La commande avec sed fonctionne uniquement si j'utilise le code dans ton message (avec un seul espace entre les balises) mais pas avec le code original (plusieurs espaces entre les balises).

    Merci d'avance pour votre aide et bonne année 2015

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par Foyus Voir le message
    La commande avec grep ne fonctionne pas avec mon environnement
    Tu n'utilises alors probablement ni Linux, ni les outils GNU et tu n'es donc probablement pas dans le bon forum: http://www.developpez.net/forums/f17...mmandes-posix/

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

Discussions similaires

  1. Découpage du fichier XML en 3 niveaux
    Par dorra1987 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 08/01/2015, 09h50
  2. [SAX] Découpage fichier xml
    Par akhen3100 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 06/03/2009, 09h59
  3. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 15h22
  4. [Kylix] Composant IBM pour fichiers XML
    Par Mister Nono dans le forum EDI
    Réponses: 1
    Dernier message: 29/09/2002, 20h28
  5. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29

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