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 :

XmlNode , XPathNodeIterator ou ReadString


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 100
    Points : 79
    Points
    79
    Par défaut XmlNode , XPathNodeIterator ou ReadString
    Bonjour,

    J'aimerais récupérer les informations d'une bande contenu dans un fichier XML.
    Voilà la forme de ce fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <Parameters>
      <Bande0>
        <Name>C</Name>
        <Pos_X>33,3</Pos_X>
        <Delat_Pos_X>0,05</Delat_Pos_X>
        <Width>0,55</Width>
        <Delat_Width>0,05</Delat_Width>
        <Test_Band>True</Test_Band>
        <Threshold>13</Threshold>
      </Bande0>
      <Bande1>
      [...]
    </Parameters>
    Je voudrais donc récupérer les infos contenu dans la balise Bande0 mais en vérifiant leur nom car l'ordre peut changer. J'ai essayé avec un XmlNode mais je n'arrive à accèder au fils que par numéro d'index et non par nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(@XMLFile);
    XmlNode Parameters = xmlDoc.DocumentElement;
    XmlNode Band0 = Parameters.SelectSingleNode("Bande0");
    J'ai également essayé avec un XPathNavigator mais je bloque aussi sur la façon de récupérer les élément par leurs nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XPathNavigator nav = xmlDoc.CreateNavigator();
    XPathNodeIterator iter = nav.Select("/Parameters/Bande0/*");
    Je réussie avec ce code mais si cela est la seule solution je vois pas l'intérêt par rapport à un readstring.
    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
                    XmlNode Parameters = xmlDoc.DocumentElement;
                    XmlNode Band0 = Parameters.SelectSingleNode("Bande0");
                    XmlNode Name = Band0.SelectSingleNode("Name");
                    XmlNode Pos_X = Band0.SelectSingleNode("Pos_X");
                    XmlNode Delat_Pos_X = Band0.SelectSingleNode("Delat_Pos_X");
                    XmlNode Width = Band0.SelectSingleNode("Width");
                    XmlNode Delat_Width = Band0.SelectSingleNode("Delat_Width");
                    XmlNode Test_Band = Band0.SelectSingleNode("Test_Band");
                    XmlNode Threshold = Band0.SelectSingleNode("Threshold");
     
                    string BdName = Name.InnerXml;
                    double BdPos_X = Double.Parse(Pos_X.InnerXml);
                    double BdDelat_Pos_X = Double.Parse(Delat_Pos_X.InnerXml);
                    double BdWidth = Double.Parse(Width.InnerXml);
                    double BdDelat_Width = Double.Parse(Delat_Width.InnerXml);
                    bool BdTest_Band = bool.Parse(Test_Band.InnerXml);
                    int BdThreshold = Int32.Parse(Threshold.InnerXml);
    J'aimerais avoir un avi critique sur ma solution.
    Merci.

  2. #2
    Membre régulier
    Étudiant
    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Points : 97
    Points
    97
    Par défaut
    Tu peux essayer avec du Linq to Xml.

    Exemple :

    XLM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <FavoriteFolders>
      <Folder Name="Name" Type="Folder" Path="Path" />
      <Folder Name="Name1" Type="Folder1" Path="Path1" />
      <Folder Name="Name2" Type="Folder2" Path="Path2" />
    </FavoriteFolders>
    C# - Linq To Xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    _favoriteFolders = new ObservableCollection<Source>();
                XDocument doc = XDocument.Load("favoriteFolders.xml");
     
                var folders = from folder in doc.Descendants("Folder")
                              select new {
                                  Name = folder.Attribute("Name").Value,
                                  Type = folder.Attribute("Type").Value,
                                  Path = folder.Attribute("Path").Value,
                              };
     
                foreach (var folder in folders) {
                    Debug.WriteLine(var.Name);
                }
    Dans ton cas, tu utiliseras .Element("LeNomDeTonElement").Value au lieu de .Attribute("LeNomDeTonAttribut");

    J'espère que ca t'aidera

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

Discussions similaires

  1. XmlNode et le nb de childs
    Par jerome.fortias dans le forum C#
    Réponses: 4
    Dernier message: 11/12/2007, 16h19
  2. [XpathNavigator] Comment recuperer le XmlNode courant ?
    Par igorzup dans le forum Accès aux données
    Réponses: 2
    Dernier message: 25/08/2006, 16h59
  3. Réponses: 3
    Dernier message: 05/05/2006, 16h14
  4. [TComPort] Analyse des données reçues avec ReadStr
    Par chourmo dans le forum Langage
    Réponses: 4
    Dernier message: 22/06/2005, 14h12
  5. Comment utilise-t-on ReadStr sur le port COM ?
    Par chourmo dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/06/2005, 18h00

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