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

C# Discussion :

Remplacer (écrire) une valeur en xml


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut Remplacer (écrire) une valeur en xml
    Bonjour,
    J'ai un fichier xml que je parse avec XmlDocument.
    Je récupère la valeur d'un attribut avec GetElementsByTagName() :
    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
     
    public ConfigManager(string xmlFile)
    {
                XmlDocument xDoc = new XmlDocument();
                try
                {
                    xDoc.Load(xmlFile);
                }
                ...
    }
     
    public XmlNodeList GetValue(string tagName)
    {
                     return xDoc.GetElementsByTagName(tagName);
    }
    Je voudrais savoir comment je peux écrire, remplacer la valeur d'un attribut ?
    J'ai tenté XMLWriter mais il me réécrit tout le fichier en entier, or je ne veux changer qu'une seule valeur..

    Comment faire ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Salut,

    Si tu as chargé ton xml via XmlDocument, tu as presque fait tout le travail. Il existe une méthode XmlDocument.Save pour enregistrer le document. Il te suffit de modifier les noeuds avec InnerText/InnerHtml par exemple.

    ps : vu ce lien cette méthode semble dépréciée. Il vaut mieux utiliser SelectNodes

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut
    XmlDocument::Save Method :
    Saves the XML document to the specified file
    Merci mais ce n'est pas ce que je cherche, là il va sauver un fichier xml.
    Moi je veux juste écrire une seule valeur à un endroit précis (et le sauver ensuite).

    Exemple
    Fichier original :
    <item>
    <num>3</num
    </item>

    J'affecte le chiffre 1 à l'élément num :
    <item>
    <num>1</num
    </item>

    Et je sauve..
    Il faudrait donc une méthode de qui prenne au minimum 2 arguments, un où je spécifiera l'élément à modifier et le 2ème argument la nouvelle valeur que je veux lui donner.

    Ca n'existe pas ?

    Merci !

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Citation Envoyé par jeremm Voir le message
    Merci mais ce n'est pas ce que je cherche, là il va sauver un fichier xml.
    Moi je veux juste écrire une seule valeur à un endroit précis (et le sauver ensuite).

    Exemple
    Fichier original :
    <item>
    <num>3</num
    </item>

    J'affecte le chiffre 1 à l'élément num :
    <item>
    <num>1</num
    </item>

    Et je sauve..
    Il faudrait donc une méthode de qui prenne au minimum 2 arguments, un où je spécifiera l'élément à modifier et le 2ème argument la nouvelle valeur que je veux lui donner.

    Ca n'existe pas ?

    Merci !
    D'après ton exemple, tu souhaites pouvoir modifier la valeur textuelle d'un noeud et non pas modifier la hiérarchie des noeuds nin ses attributs. Ok ?

    La chose que demande le plus de travail est de récupérer le bon noeud. Cela dépend de ton xml, mais il est fort à parier qu'il faudra utiliser de l'XPath.
    A titre d'exemple voici quelques expressions qui peuvent convenir dans la limite de ton exemple :
    - SelectNodes("//num")
    - SelectNodes("/item/num")

    Une fois le noeud obtenu, un simple XmlNode.InnerText devrait suffire pour modifier son contenu.

    Au final, c'est à toi de bien récupérer le bon noeud et de le modifier. Il n'y a pas de "fonction toute faite" pour cela.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut
    Salut,

    Merci bien pour vos pistes, j'ai finalement utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // récupère le noeud à modifier
    XmlNode newValue = xDoc.GetElementsByTagName("long").Item(0);
    // y écrit la nouvelle valeur
    newValue.InnerXml = value;
    // enregistre le fichier, - obligatoire pour qu'il sauvegarde la valeur -
    xDoc.Save("config.xml");

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

Discussions similaires

  1. Include en fonction d'une valeur du xml
    Par Xunil dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 06/07/2007, 20h11
  2. Remplacement d'une valeur hexa dans une chaine
    Par raoulchatigre dans le forum C++
    Réponses: 7
    Dernier message: 18/09/2006, 17h27
  3. (VBA) écrire une valeur dans une table
    Par migaleb dans le forum Access
    Réponses: 1
    Dernier message: 22/06/2006, 13h45
  4. Remplacement d'une valeur numérique
    Par Jean-Louis Corbiau dans le forum Access
    Réponses: 9
    Dernier message: 29/09/2005, 16h25
  5. remplacement d'une valeur par une autre
    Par hugoos dans le forum Langage
    Réponses: 9
    Dernier message: 20/09/2005, 22h43

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