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

Ruby Discussion :

Problème pour écrire dans un fichier XML (après avoir suivi le tuto de ce site)


Sujet :

Ruby

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut Problème pour écrire dans un fichier XML (après avoir suivi le tuto de ce site)
    Bonjour,

    Je désire écrire dans un fichier XML avec du ruby et j'ai suivi le tutoriel de ce site. Pour la lecture, c'est bon mais pour l'écriture je en comprends pas comment faire..

    http://ruby.developpez.com/cours/par...-en-ruby/#LIII

    Mon fichier XML est très simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="ISO-8859-15"?>
    <!DOCTYPE bibliography PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
    <users>
        <user>
          <login>toto</login>
          <password>titi</password>
       </user>
       <user>
          <login>tota</login>
          <password>tito</password>
       </user>
    </users>
    Mon utilisateur envoie au programme un login et un mot de passe et je désire ajouter un nouveau "user".

    Après de nombreuses tentatives, impossible de faire cela. Le programme ne plante pas mais le fichier XML ne bouge pas.

    Dernier code en date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    user = Element.new("user")
    					login = Element.new("login")
    					login.add_text("Bertrand")
    					pass=Element.new("password")
    					pass.add_text("gg")
    					doc.root.insert_after("//user", user)
    Quelqu'un saurait m'expliquer comment s'y prendre?

  2. #2
    Membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut
    Je ne connais pas trop REXML, mais tes deux élements ne semblent pas rattachés à user.
    A mon avis, tu dois rajouter cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    user << login
    user << pass
    Ensuite, le fait d'utiliser insert_after user doit créer un conflit, étant donné qu'il existe plusieurs noeuds user. Le fait de créer un nouvel Element ne suffit-il pas (il devrait aller automatiquement en fin de lise) ?
    Je verais un truc dans le style (non testé, je n'ai jamais utilisé REXML !) :

    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
     
    #creation du document
    doc = Document.new()
     
    doc.add_element("users")
    users = doc.root
     
    #ajout d'un utilisateur
    user = Element.new("user")
      login = Element.new("login")
      login.add_text("toto")
      pass = Element.new("password") 
      pass.add_text("supercr3vette")
    user << login
    user << pass
     
    users << user
    Encore une fois, poste à prendre avec des pincettes (mais faut bien que quelqu'un te réponde )

    Bonne année !

  3. #3
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut
    ça ne change rien, merci quand même....

  4. #4
    Membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut
    Alors après quelques tests je crois qu'en fait en faisant Document.new() on travaille sur une copie de document original. Il faudrait donc enregistrer les changements avant de quitter l'application. Ce code fonctionne (mais je ne sais pas pourquoi le nouveau noeud ne bénificie d'aucune mise en forme) :

    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
     
    require 'rexml/document'
    include REXML
     
    #chargement du document
    doc = Document.new(File.new("users.xml"))
     
    users = doc.root
     
    #ajout d'un utilisateur
    user = Element.new("user")
      login = Element.new("login")
      login.add_text("toto")
      pass = Element.new("password") 
      pass.add_text("supercr3vette")
    user.add_element(login)
    user.add_element(pass)
     
    users.elements << user
     
    open("users.xml", 'w') do |f| f.puts doc end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version='1.0' encoding='ISO-8859-15'?>
    <!DOCTYPE bibliography PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"><users>
        <user>
          <login>toto</login>
          <password>titi</password>
       </user>
       <user>
          <login>tota</login>
          <password>tito</password>
       </user>
    <user><login>toto</login><password>supercr3vette</password></user></users>
    Mais il doit y avoir une meilleure solution (on ouvre deux fois le fichier xml )...

    Enfin ça peut toujours constituer une solution de secours .

    PS : Sinon sur la mise en forme bah je compte sur toi

  5. #5
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par <Zer0> Voir le message
    Alors après quelques tests je crois qu'en fait en faisant Document.new() on travaille sur une copie de document original. Il faudrait donc enregistrer les changements avant de quitter l'application. Ce code fonctionne (mais je ne sais pas pourquoi le nouveau noeud ne bénificie d'aucune mise en forme) :

    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
     
    require 'rexml/document'
    include REXML
     
    #chargement du document
    doc = Document.new(File.new("users.xml"))
     
    users = doc.root
     
    #ajout d'un utilisateur
    user = Element.new("user")
      login = Element.new("login")
      login.add_text("toto")
      pass = Element.new("password") 
      pass.add_text("supercr3vette")
    user.add_element(login)
    user.add_element(pass)
     
    users.elements << user
     
    open("users.xml", 'w') do |f| f.puts doc end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version='1.0' encoding='ISO-8859-15'?>
    <!DOCTYPE bibliography PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"><users>
        <user>
          <login>toto</login>
          <password>titi</password>
       </user>
       <user>
          <login>tota</login>
          <password>tito</password>
       </user>
    <user><login>toto</login><password>supercr3vette</password></user></users>
    Mais il doit y avoir une meilleure solution (on ouvre deux fois le fichier xml )...

    Enfin ça peut toujours constituer une solution de secours .

    PS : Sinon sur la mise en forme bah je compte sur toi

    Merci beaucoup! Pour la mise en forme, ce n'est pas grave pour ce que je dois faire...

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

Discussions similaires

  1. Problème pour enregistrer dans un fichier XML
    Par Jb_One73 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 14/02/2015, 08h22
  2. Problème pour écrire dans un fichier
    Par cogi234 dans le forum Débuter
    Réponses: 2
    Dernier message: 28/09/2014, 20h30
  3. [Rech. Comp.] Lire et écrire dans des fichiers XML
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2005, 20h48
  4. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28
  5. Réponses: 2
    Dernier message: 01/06/2004, 12h47

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