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 :

Ordonner les données fichier XML


Sujet :

Shell et commandes GNU

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 686
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cat fichier.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        <value>toto</value> <!-- ne pas prendre en compte -->
        <value>100</value>
        <node><value>25</value></node>
    </root>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while read line
    do
       if expr "$line" : '<value>[[:digit:]]*</value>' 2>&1 >/dev/null
       then echo "$line" #ici, au lieu de "$line", il faut mettre "<value>$n</value>", qui aura préalablement incrémenté
       fi #il faut ajouter un `else' pour afficher les lignes qui ne correspondent pas
    done <fichier.xml
    <value>100</value>
    pas d'erreurs !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  2. #22
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    Merci N_BAH et à vous tous. J'ai un script qui me renvoie des résultats plus ou moins cohérents.
    J'ai quand même une question, dans mon fichiers.xml (fichier résultat) il ne garde pas les lignes non changées. En ouvrant le fichier résultat il n'y a que les lignes qu'il a changées. Je veux quand même garder ces lignes. Merci de votre aide. en mettant l'incrémentation juste avant le else je retrouve dans mon fichier résultat les données du fichier d'origine et il ne change pas la balise value.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/sh
     
    set -x
    i=0
     
    while read line
    do
       if expr "$line" : '<Value>[[:digit:]]*</Value>' 2>&1 >/dev/null
            let i=$i+1
            then echo "<Value>$i</Value>" >>Fichiers.xml
       else
            echo "$line" >>Fichiers.xml
       fi
    done <Fichier.xml

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

    Essaye en montant le "then" d'une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            then let i=$i+1
            echo "<Value>$i</Value>" >>Fichiers.xml
    au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            let i=$i+1
            then echo "<Value>$i</Value>" >>Fichiers.xml
    Cordialement.

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

    Une version spécial allergique au sed :

    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
    30
    $ cat sed1.sed
    #!/bin/sed -nf
    1s/^/0 /
    H
    ${
      g
      s/\(<value>\)[0-9]*\(<\/value>\)/\1NOMBRE\2/g
      s/\n//
      :d
      s/9\(_*\) /_\1 /
      td
      s/^\(_*\) /1\1 /; tn
      s/8\(_*\) /9\1 /; tn
      s/7\(_*\) /8\1 /; tn
      s/6\(_*\) /7\1 /; tn
      s/5\(_*\) /6\1 /; tn
      s/4\(_*\) /5\1 /; tn
      s/3\(_*\) /4\1 /; tn
      s/2\(_*\) /3\1 /; tn
      s/1\(_*\) /2\1 /; tn
      s/0\(_*\) /1\1 /; tn
      :n
      s/^\([0-9]*\)_/\10/
      tn
    	s/\(<value>\)NOMBRE\(<\/value>\)/\1ACHANGER\2/
    	s/^\([0-9]*\)\(.*\)ACHANGER/\1\2\1/
    	td
    	s/^[0-9]* //
    	p
    }
    ce qui donne par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ cat value.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        <value>toto</value> <!-- ne pas prendre en compte -->
        <value>100</value>
        <node><value>25</value></node>
    </root>
    <root4><value></value>blabla<value>45</value></root4>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ ./sed1.sed value.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        <value>toto</value> <!-- ne pas prendre en compte -->
        <value>1</value>
        <node><value>2</value></node>
    </root>
    <root4><value>3</value>blabla<value>4</value></root4>
    Si j'ai du courage ou si certain le veulent vraiment, je donnerais une explication du code qui n'est autre qu'une réexploitation de l'incrémentation d'un compteur que l'on utilise pour renseigner les balises en question.

    Cordialement.

  5. #25
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    Merci beaucoup à vous tous !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. extraire données fichiers xml vers excel
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/06/2008, 11h17
  2. ordonner les données d'une feuille dans une macro
    Par meuah dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2008, 16h27
  3. [SQL2k5][XML] Retourner les données en XML
    Par maitrebn dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/02/2008, 09h46
  4. Les données du xml en php
    Par ti-bo dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 19/07/2007, 01h45
  5. Que choisir pour gérer les sauvegardes : fichiers XML ou base de données ?
    Par Invité dans le forum Développement 2D, 3D et Jeux
    Réponses: 11
    Dernier message: 14/06/2007, 12h58

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