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 :

xmlstarlet : Ajouter des lignes sans élément discriminant


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 484
    Points : 873
    Points
    873
    Par défaut xmlstarlet : Ajouter des lignes sans élément discriminant
    Bonjour à tous,

    j'ai une question concernant xmlstarlet. J'ai ce fichier xml:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <php_macro_engine_config xmlns="http://www.jedox.com/jedox/wss" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    contenu divers
    </php_macro_engine_config>

    je souhaiterais ajouter les lignes suivantes en utilisant xmlstarlet:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <functions loglevel="error">
        <function spreadsheet_function="GETTPOS"/>
        <function spreadsheet_function="GETLPOS"/>
    </functions>

    j'ai executé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xmlstarlet ed -s "/_:php_macro_engine_config" -t elem -n "functions" -v "" -i "/_:php_macro_engine_config/functions" -t attr -n loglevel -v error
    -s "/_:php_macro_engine_config/functions" -t elem -n "function" -i "/_:php_macro_engine_config/functions/function" -t attr -n spreadsheet_function -v GETTPOS
    -s "/_:php_macro_engine_config/functions" -t elem -n "function" -i "/_:php_macro_engine_config/functions/function" -t attr -n spreadsheet_function -v GETLPOS 
    macro_engine_config.xml
    la commande ci-dessus me crée ceci:
    <function spreadsheet_function="GETTPOS" spreadsheet_function="GETLPOS"/>
    <function spreadsheet_function="GETLPOS"/>

    sans doute car les <function> ne sont pas uniques, et on ne peut pas les différencier?

    Une idée?

    D'avance merci!
    laloune
    Consultant B.I.
    Spécialité(s): Excel, SQL, Business Intelligence (Jedox Palo, Talend)

    "A problem worthy of attack proves its worth by fighting back." Piet Hein

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 245
    Points : 13 464
    Points
    13 464
    Par défaut
    Bonjour

    C'est effectivement un problème.

    La solution "bourrine" est de donner un nom temporaire à chacun de tes nœuds. Et finir la liste de changements par des "-r" qui enlèveront les noms temporaires.

    La solution "élégante", depuis xmlstarlet 1.4.0 (26/08/2012) , est d'utiliser $prev (ou $xstar:prev) comme argument de -s, -i ou -a pour se référer au dernier élément créé.
    Bien sûr, il faudra protéger $prev par des simples quotes pour que bash n'interprète pas $prev comme une variable à lui, donc remplaçable.

    La nouveauté en rouge:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ xmlstarlet ed -s "/_:php_macro_engine_config" -t elem -n "functions" -v "" -i "/_:php_macro_engine_config/functions" -t attr -n loglevel -v error -s "/_:php_macro_engine_config/functions" -t elem -n "function" -i "/_:php_macro_engine_config/functions/function" -t attr -n spreadsheet_function -v "GETTPOS" -s "/_:php_macro_engine_config/functions" -t elem -n "function" -i '$prev' -t attr -n spreadsheet_function -v "GETLPOS" php.xml 
    <?xml version="1.0"?>
    <php_macro_engine_config xmlns="http://www.jedox.com/jedox/wss" xmlnssi="http://www.w3.org/2001/XMLSchema-instance">
            contenu divers
    <functions loglevel="error"><function spreadsheet_function="GETTPOS"/><function spreadsheet_function="GETLPOS"/></functions></php_macro_engine_config>

    ( Merci Richard Walker )
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 484
    Points : 873
    Points
    873
    Par défaut
    c'est absolument impeccable (la solution élégante en fait, je n'ai pas encore testé la solution bourrine)

    merci infiniment!!
    laloune
    Consultant B.I.
    Spécialité(s): Excel, SQL, Business Intelligence (Jedox Palo, Talend)

    "A problem worthy of attack proves its worth by fighting back." Piet Hein

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

Discussions similaires

  1. [IP-2010] Ajouter des lignes à un tableau extensible sans code
    Par hamzaj dans le forum InfoPath
    Réponses: 3
    Dernier message: 04/10/2011, 15h28
  2. [WD9] [Etats][Débutant] Ajouter des lignes à un tableau
    Par EpOnYmE187 dans le forum WinDev
    Réponses: 7
    Dernier message: 20/12/2005, 12h20
  3. [Fichier] Ajouter des lignes...
    Par Life Hunter dans le forum Langage
    Réponses: 4
    Dernier message: 26/11/2005, 18h28
  4. Réponses: 14
    Dernier message: 22/09/2005, 16h49
  5. [Fichier] Ajout des lignes de doc dans arraylist
    Par 3adoula dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 29/04/2004, 22h41

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