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

Modules Perl Discussion :

Perl + Twig => operations sur fichier XML


Sujet :

Modules Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2005
    Messages : 21
    Points : 11
    Points
    11
    Par défaut Perl + Twig => operations sur fichier XML
    Bonjour à tous,

    Je souhaite traiter un fichier XML et le modifier si nécessaire.

    Voici les opérations possibles :
    1) Modification d'une valeur pour un élément si celle-ci est erronée
    2) ajout d'un nouvel élément si celui n'est pas trouvé dans le fichier XML

    Pour le 1), je n'ai pas de problème, j'arrive bien à modifier une valeur, après avoir déterminé l'élément et sa valeur...

    Pour le 2), je n'arrive pas à trouver un moyen de détecter si une balise existe bien dans mon fichier XML.
    idéalement, j'aimerais pouvoir faire le traitement suivant :
    a) on cherche la balise dans le fichier
    b) si elle existe alors on vérifie sa valeur et on modifie si nécessaire
    c) si elle n'existe pas, on crée le couple <element>valeur</element> dans le fichier XML


    Voici un exemple simplifié de mon fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <serveur>
      <hostname>toto</hostname>
      <network>
          <interface nic="eth0" ip="10.0.0.10" />
      </network>
    </serveur>
    Ainsi, j'aimerais pouvoir rajouter dans mon fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <interface nic="eth1" ip="10.0.0.11" />
    après avoir vérifié que cet élément dont l'attribut nic vaut eth1 n'existe pas dans mon fichier

    Au final, le fichier XML en sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <serveur>
      <hostname>toto</hostname>
      <network>
          <interface nic="eth0" ip="10.0.0.10" />
          <interface nic="eth1" ip="10.0.0.11" />
      </network>
    </serveur>

    Si quelqu'un a une piste ... ca m'arrangerait grandement

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Et bien en utilisant XML::Twig, il suffit de récupérer le twig pour serveur/network et vérifier la liste de ses enfants, si elle contient l'élément que tu veux tu le modifies, sinon tu le crées et tu le rajoute aux enfants du twig. Laquelle de ces étapes te pose problème ?

    --
    Jedaï

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2005
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    A vrai dire, j'ai réussi à trouver un début de réponse en utilisant get_xpath, mais je me doutais bien que cette solution n'était pas la meilleure.


    Quand tu parles de twig, tu fais référence au twig_handlers ?

    Par exemple, je devrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $twig= new XML::Twig(twig_handlers => { "/serveur/network" => \&network}

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sub network
    {
    traitement pour chercher, modifier/créer mon élément
    }
    Est-ce que j'ai bon ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2005
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    De plus, est-il possible d'insérer des variables dans le twig_handlers ?

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $twig= new XML::Twig(twig_handlers => { "/serveur/network/interface[@nic=$mavariable]" => \&network}
    je suppose que la syntaxe n'est pas bonne mais dans le mêm esprit, est-ce possible ?

    Ce que je ne saisis pas, c'est comment mettre en place intelligement une série de twig_handlers qui auront pour rôle de vérifier que chaque élément existe, que chaque élément dont un attribut (ex: nic) vaut une variable présente en perl.

    Faut-il créer autant de twig_handlers que de vérification ?
    ou une routine plus simple existe ?

    merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2005
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Et bien en utilisant XML::Twig, il suffit de récupérer le twig pour serveur/network et vérifier la liste de ses enfants, si elle contient l'élément que tu veux tu le modifies, sinon tu le crées et tu le rajoute aux enfants du twig. Laquelle de ces étapes te pose problème ?

    --
    Jedaï
    Pour répondre à ta question Jedaï, les étapes qui me posent problème sont :
    - Comment détecter que /serveur/network n'existe pas ? que /serveur/network/interface n'existe pas ?
    - Comment créer et rajouter aux enfants du twig le nouvel élément.

    merci

Discussions similaires

  1. Requête sur fichier XML
    Par migutz dans le forum VB.NET
    Réponses: 1
    Dernier message: 09/11/2007, 15h34
  2. [XML] Quizz basé sur fichier XML
    Par Heilong dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 29/10/2007, 14h16
  3. Operations sur fichier text
    Par niosOs dans le forum C#
    Réponses: 3
    Dernier message: 06/09/2007, 15h22
  4. [AJAX] requête sur fichier.xml => erreur 405 sous IE !
    Par jeje13009 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 26/03/2007, 21h42
  5. Réponses: 5
    Dernier message: 25/07/2005, 10h17

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