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 :

Récupérer valeur d'un fichier XML


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 100
    Par défaut Récupérer valeur d'un fichier XML
    Bonjour,

    j'ai un petit fichier XML, mais je n'arrive pas à récupérer les infos qui sont dedans...

    Voici mon fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <ipServeur>169.254.221.190</ipServeur>
      <portServeur>8001</portServeur>
      <cheminBDMercator>C:\Users\JulienPortable\Desktop\Mercatorerp\demoerpsite\data</cheminBDMercator>
    </configuration>
    Et le code de récupération :

    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
    22
    23
    24
    25
    26
    27
    28
    public String recuperationValeur(String cle)
            {
                String value = null;
                try
                {
                    if (txtReader != null)
                    {
                        while (txtReader.Read())
                        {
                            XmlNodeType nType = txtReader.NodeType;
                            if (nType == XmlNodeType.Element)
                            {
                                Console.WriteLine("name : " + txtReader.Name);
                                if (txtReader.Name.Equals(cle))
                                {
                                    //value = txtReader.GetAttribute(cle);
                                    value = txtReader.Value;
                                    Console.WriteLine("Value : "+txtReader.Value);
                                }
                            }
                        }
                    }
                    return value;
                }
                catch (XmlException ex)
                {
                    return value;
                }
    Donc j'appelle ma fonction ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String ip = monXML.recuperationValeur("ipServeur");
    mais lorsque j'essaie de l'afficher, il ne met rien

    Auriez-vous une idée ?

    Merci d'avance,

    Julien.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 100
    Par défaut
    Yep, j'ai trouvé une autre méthode qui marche

    Je poste toujours le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    XmlDocument docxml = new XmlDocument();
                    docxml.Load(nomFichier);
     
                    XmlElement root = docxml.DocumentElement;
     
                    XmlNode elem2 = root.SelectSingleNode("ipServeur");
     
                    Console.WriteLine("valeur = " + elem2.InnerText);
                    return elem2.InnerText;
    Je marque le topic en résolu !

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Oulà, tu manipules le XmlReader à la main ? Tu aimes souffrir ou quoi ?

    Il y a plein de façons de lire du XML :
    - XmlReader (clairement la plus difficile...)
    - XmlDocument (un peu plus simple mais encore assez galère)
    - Linq to XML (facile)
    - Sérialisation XML (facile quand le schéma est simple, ce qui est ton cas)

    Dans ton cas la sérialisation XML convient très bien et est très facile à mettre en place. Ca a aussi l'avantage d'être facile à faire évoluer : si tu ajoutes des nouveaux paramètres, tu n'auras pas besoin de modifier le code qui lit le XML.

    En gros, tu déclares une classe Config, avec des propriétés pour chaque paramètre de conf, et avec des attributs qui indiquent comment ça doit être sérialisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [XmlRoot("configuration")] // Nom de l'élément racine
    public class Config
    {
        [XmlElement("ipServeur")] // Nom de l'élément
        public string IpServeur { get; set; }
     
        [XmlElement("portServeur")]
        public int PortServeur { get; set; }
     
        [XmlElement("cheminBDMercator")]
        public string CheminBDMercator { get; set; }
    }
    (Remarque que les propriétés n'ont pas besoin d'avoir le mêmes noms que les éléments XML, tu peux les appeler différemment si besoin)

    Ensuite tu utilises ce code pour lire la conf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Config cfg;
    XmlSerializer xs = new XmlSerializer(typeof(Config));
    using (var reader = new StreamReader("config.xml"))
    {
        cfg = (Config)xs.Deserialize(reader);
    }
    Et pour enregistrer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    XmlSerializer xs = new XmlSerializer(typeof(Config));
    using (var writer = new StreamWriter("config.xml"))
    {
        xs.Serialize(writer, cfg);
    }

    Sinon, vu la simplicité du schéma, Linq to XML est aussi une bonne option :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        var doc = XDocument.Load("config.xml");
        string ipServeur = (string)doc.Root.Element("ipServeur");
        int portServeur = (int)doc.Root.Element("portServeur");
        string cheminBDMercator = (string)doc.Root.Element("cheminBDMercator");

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 100
    Par défaut
    Salut tomlev

    waw c'est d'une simplicité cette méthode, vraiment utile la sérialisation, en quelque lignes on récupère et on peut modifier des valeurs dans le fichier XML

    Je vais jeter à la poubelle l'autre méthode qui est beaucoup plus longue en terme de lignes de code ... Un grand merci pour tes morceaux de codes

    Bonne journée,

    Julien

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 100
    Par défaut
    J'aurai encore une petite question. Pour cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using (var reader = new StreamReader("config.xml"))
    Je voudrais qu'il aille chercher mon fichier XML se trouvant dans un dossier dans ma solution. Le fichier XML se trouve dans le dossier "Utiles". Est-ce que je peux faire comme ça? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using (var reader = new StreamReader(@"\Utiles\config.xml"))

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par asnaeb Voir le message
    J'aurai encore une petite question. Pour cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using (var reader = new StreamReader("config.xml"))
    Je voudrais qu'il aille chercher mon fichier XML se trouvant dans un dossier dans ma solution. Le fichier XML se trouve dans le dossier "Utiles". Est-ce que je peux faire comme ça? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using (var reader = new StreamReader(@"\Utiles\config.xml"))
    Bah en fait si tu ne mets pas le chemin complet, c'est relatif au répertoire courant (par défaut, celui de l'exécutable). Donc si ton fichier de config est dans un sous-répertoire "Utiles", tu peux faire ça, mais assure-toi que le répertoire courant soit correct. Si tu peux utiliser un chemin absolu, c'est plus sûr...

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 100
    Par défaut
    Okok, sinon ce que je peux faire c'est qu'à chaque démarrage de l'application, on teste si le fichier XML est présent dans le répertoire courant. S'il est présent, je loade toutes les informations sinon je le crée avec les informations par défaut définies dans le code de l'application.

    Mais lorsque je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Config cfg;
    XmlSerializer xs = new XmlSerializer(typeof(Config));
    using (var reader = new StreamReader("config.xml"))
    {
        cfg = (Config)xs.Deserialize(reader);
    }
    Comment savoir si le fichier XML est déjà présent ? Y a-t-il une exception à catcher ?

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

Discussions similaires

  1. [VB.NET] Récupérer une valeur d'un fichier XML (*.CONFIG)
    Par MikeGuibs dans le forum Débuter
    Réponses: 1
    Dernier message: 13/08/2014, 23h11
  2. Récupérer valeur balise dans fichier XML
    Par jamy69 dans le forum VBScript
    Réponses: 3
    Dernier message: 24/05/2012, 16h45
  3. Modifier une valeur dans un fichier xml
    Par arthrax dans le forum VBScript
    Réponses: 3
    Dernier message: 03/04/2007, 09h46
  4. Récupérer valeurs d'un fichier ini en php5
    Par lenoil dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2007, 16h05
  5. [XSL]récupérer une valeur de plusieurs fichiers XML
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/02/2006, 00h32

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