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 :

C# fichier XML changer la valeur d'un attribut


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 49
    Points
    49
    Par défaut C# fichier XML changer la valeur d'un attribut
    Bonjour,

    Je dois parser un dossier avec tout plein de xml, je cherche comment faire sorte de changer les attributs de 3 balises dans chaque fichier.

    La structure de tous mes xml ne change jamais ils sont tous identiques parcontre par rapport à leur nom je dois changer la date contenu dans "value".


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <TEST value="20081030">
       <TEST2 keywords = "20081030">
       </TEST2>
    </TEST>
    Je pensais faire une boucle foreach pour parser tout mon dossier ensuite par rapport au nom faire des boucle if un peu comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    foreach (FileInfo allfiles in Doc.GetFiles("*.xml")
    {
       if(allfiles.name == "TEST1")
        // par exemple on change la valeur de value
     
       if(allfiles.name == "TEST2")
        // par exemple on change la valeur de keywords
     
     
     
    }

    Je sais pas si c'est la meilleur facon de procéder à moins d'utiliser le linQ to xml mais je ne suis pas assez calé pour cela.

    Si vous avez une idée pour comparer la valeur de mon attribut si la date est égale à la date du jour alors on laisse sinon on la change Cela dépend aussi du nom du fichier.

    J'arrive jamais à être assez clair :'( désolé , si je ne le suis pas la :s

  2. #2
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    salut,

    lister les fichiers + Regex pour récupérer la date ... c'est comme ceci que j'aurais fait, car je ne pense pas qu'un XmlDocument ira plus vite ... mais c'est a tester.

    utilise la Regex pour casser la date en 3 parties (année/mois/jour), ensuite ça sera très simple pour comparer les différentes valeur.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Lorenzo77 Voir le message
    salut,

    lister les fichiers + Regex pour récupérer la date ... c'est comme ceci que j'aurais fait, car je ne pense pas qu'un XmlDocument ira plus vite ... mais c'est a tester.

    utilise la Regex pour casser la date en 3 parties (année/mois/jour), ensuite ça sera très simple pour comparer les différentes valeur.
    Salut,

    merci pour ta réponse, mais je suis bien obliger de lire le document XML pour parcourir dans tel ou tel balise qui commence par "TEST" vu que j'en ai des tonnes de balises et il y en a 3 ou je dois changer l'attribut par rapport à la date du jour du systeme et en fonction du nom du fichier.

    Je pense que je suis quand même obliger d'utiliser XMLDocument au moins pour me positionner dans le fichier et changer l'attribut. D'ailleurs j'ai commencé à regarder pour changer d'attribut et c'est assez compliqué je trouve.
    Il n'y a pas de méthode qui permet de changer la valeur genre comme le REPLACECHILD () ou les REPLACE() pour les string .

    Je me trompe peut être vu ma maigre expérience en dév .

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Pour ce qui est de récupérer les fichier, pas la peine de passer par du FileInfo, ça n'apporte rien dans ton cas. Plutôt faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach(string fileName in System.IO.Directory.GetFiles("...", "test*.xml"))
    {
       // En fonction du nom du fichier on effectue le traitement qui va bien
       if (System.IO.Path.GetFileName(fileName) == "...")
       {
       }
       ...
    }
    Citation Envoyé par Seth_75 Voir le message
    D'ailleurs j'ai commencé à regarder pour changer d'attribut et c'est assez compliqué je trouve.
    C'est loin d'être compliqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    XmlDocument doc;
    ...
    XmlNode monNoeud = doc.SelectSingleNode("...");
    monNoeud.Attributes["MonAttribut"].Value = "...";
    Ensuite pour ce que tu veux faire, on peut procéder ainsi par exemple
    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
    // On récupère tous les attributs nommés "value" 
    // quel que soit leur emplacement dans le fichier XML
    // et dont la valeur n'est pas la date du jour
    string dateDuJour = DateTime.Now.ToString("yyyyMMdd");
    XmlNodeList nodes = doc.SelectNodes("//*[@value!='" + dateDuJour  + "']");
    foreach(XmlNode node in nodes)
    {
        // Si le noeud parent de l'attribut satisfait la condition et 
        // que la valeur de l'attribut ne correspond pas à la date du jour
        // on modifie la valeur de l'attribut
        if (node.ParentNode.Name.StartsWith("TEST"))
        {
            // La nouvelle valeur devient la date du jour
            node.Value = dateDuJour;
        }
    }
    A adapter, j'ai fait l'exemple en fonction de ce que j'avais compris

    Avec ça et un peu de recherche, tu devrais pouvoir te débrouiller

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Pour ce qui est de récupérer les fichier, pas la peine de passer par du FileInfo, ça n'apporte rien dans ton cas. Plutôt faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach(string fileName in System.IO.Directory.GetFiles("...", "test*.xml"))
    {
       // En fonction du nom du fichier on effectue le traitement qui va bien
       if (System.IO.Path.GetFileName(fileName) == "...")
       {
       }
       ...
    }

    C'est loin d'être compliqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    XmlDocument doc;
    ...
    XmlNode monNoeud = doc.SelectSingleNode("...");
    monNoeud.Attributes["MonAttribut"].Value = "...";
    Ensuite pour ce que tu veux faire, on peut procéder ainsi par exemple
    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
    // On récupère tous les attributs nommés "value" 
    // quel que soit leur emplacement dans le fichier XML
    // et dont la valeur n'est pas la date du jour
    string dateDuJour = DateTime.Now.ToString("yyyyMMdd");
    XmlNodeList nodes = doc.SelectNodes("//*[@value!='" + dateDuJour  + "']");
    foreach(XmlNode node in nodes)
    {
        // Si le noeud parent de l'attribut satisfait la condition et 
        // que la valeur de l'attribut ne correspond pas à la date du jour
        // on modifie la valeur de l'attribut
        if (node.ParentNode.Name.StartsWith("TEST"))
        {
            // La nouvelle valeur devient la date du jour
            node.Value = dateDuJour;
        }
    }
    A adapter, j'ai fait l'exemple en fonction de ce que j'avais compris

    Avec ça et un peu de recherche, tu devrais pouvoir te débrouiller


    Bonjour,

    Merci là c'est un peu mieux compréhensif pour moi merci beaucoup.
    Je vais faire les recherches qui s'imposent autour de ce que tu m'as donné.
    Sinon pour la boucle Foreach :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach(string fileName in System.IO.Directory.GetFiles("...", "test*.xml"))
    {
       // En fonction du nom du fichier on effectue le traitement qui va bien
       if (System.IO.Path.GetFileName(fileName) == "...")
       {
       }
       ...
    }
    C'était pour récupérer tous mes XML de mon dossier, c'était pour ca après les traité un par un et changer les attributs que je dois changer.

Discussions similaires

  1. changer la valeur d'un attribut par le contenu d'une balise
    Par joeyd dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 22/10/2007, 23h10
  2. Réponses: 1
    Dernier message: 02/04/2007, 12h37
  3. [XSLT] Changer la valeur d'un attribut XML
    Par Rouxy007 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 14/02/2007, 23h06
  4. [DOM] Changer la valeur d un attribut d un noeud.
    Par nivose110 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 01/07/2006, 16h39
  5. Comment changer la valeur d'un attribut avec une stylesheet?
    Par BugsBunny dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/06/2006, 18h18

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