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 :

Probleme de lecture d'un XmlDocument


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Probleme de lecture d'un XmlDocument
    Bonjour

    Il y a quelque chose que je n'ai probablement pas bien compris pour l'interpretation d'un XmlDocument

    - Je dispose d'un fichier kml contenant une suite de Coordonées <PlaceHolder>

    Voici un petit extrait signifiant
    On voit clairement que j'ai une serie de Nodes de type <PlaceHolder>

    Mais si j'essaye la methode .SelectNodes("//Placemark")) ca ne me donne rien du tout : je ne rentre jamais dans la boucle foreach ??? (voir code plus bas)

    Ou serait mon erreur ?

    Merci de votre aide


    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
    <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://www.opengis.net/kml/2.2">
      <Document>
        <LookAt> 
            <longitude>-1.54</longitude>
            <latitude>50.97</latitude>
            <heading>+30</heading>
            <range>393500</range>
        </LookAt> 
        <name>Routes</name>
        <description>Powered by Squid from Great-Circle (http://www.greatcircle.be)</description>
         <Folder>
         <name>route-1</name>
         <description>Based on gfs weather model</description>
         <Placemark>
           <name>WP 1</name>
           <description> Time: Thu 12 Jul 2012 06:00 UTC Boat heading: 200.0</description>
            <Point>
             <coordinates> 1.7600,51.1300,0</coordinates>
            </Point>
          </Placemark>
         <Placemark>
           <name>WP 2</name>
           <description> Time: Thu 12 Jul 2012 06:15 UTC Boat heading: 201.0</description>
            <Point>
             <coordinates> 1.7276,51.0742,0</coordinates>
            </Point>
          </Placemark>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
          XmlDocument xmlDoc = new XmlDocument();
          xmlDoc.Load(srcXml);
     
          int Count = 0;
          foreach (XmlNode node in xmlDoc.SelectNodes("//Placemark"))
          {
            Count++;
          }
    NB : je ne sais pas si il y a un truc important a connaitre que je n'ai pas encore capté mais a chaque fois que je suis confronté a la lecture d'un fichier XML et que j'ai envie de faire les choses "proprement" avec les outils existants, je me dis que les outils a disposition sont tellement limités ou compliqué que j'en arrive tres vite a ecrire un parseur a la main pour les besoins de la cause !

    Ou il y a-t-il une autre maniere de faire que je n'ai pas encore captée ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Tu dois rajouter le namespace :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var nsp = new XmlNamespaceManager(xmlDoc.NameTable);
    nsp.AddNamespace("ns", "http://www.opengis.net/kml/2.2");
     
     
    int Count = 0;
    foreach (XmlNode node in xmlDoc.SelectNodes("//ns:Placemark",nsp) )
    {
         Count++;
    }
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci guruumeditation

    Je vais essayer ce soir

    Entretemps j'avais vu que GetElementsByTagName fonctionnait

    Mais j'avoue que je n'ai pas encore bien fait la difference entre
    et
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2012
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2012
    Messages : 179
    Points : 153
    Points
    153
    Par défaut
    Salut,

    Justement je te met un code que j'ai utilisé avec GetElementsByTagName, et je t'avoue que ça a bien marché tout de suite.
    Après je ne connais pas la différence entre les deux.

    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
     
    // Storing datas in a XmlDocument
                    XmlDocument Xml_OrgMpu = new XmlDocument();
                    Xml_OrgMpu.Load(nomFichierDebug);
     
                    TextBoxInfos.AppendText("Récupération des variables du projet en cours..." + Environment.NewLine);
     
                    // Getting variables and complete path.
    XmlNodeList MyNodeComp = Xml_OrgMpu.GetElementsByTagName("Symbol");
     
                    // Loop for each Node
     
                    foreach (XmlNode MyVar in MyNodeComp)
                    {
                        // Code.
                    }

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Il semble que la différence est qu'avec le SelectNodes on peut spécifier un filtre tandis qu'avec GetElementsByTagName on prends d'office tous les éléments de ce Tag
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Bonjour,

    GetElementsByTagName n'est disponible que pour un XmlDocument, ensuite la recherche des nœuds ne se fait que sur la balise xml.
    SelectNodes est dispobile sur tous XmlNode, la recherche des nœuds se fait selon une expression XPath. Le filtrage peut être beaucoup plus fin, car il est possible de contrôler les attributs, ou même les descendants du nœud recherché.

    Enfin selon la version du framework que tu utilise, n'oublie pas que tu as linq, et même parallèle linq.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmldoc.Count(e => e.Name == "TOTO");

  7. #7
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Antoine

    Oui peut etre que pour parser Xml Linq c'est pas mal

    Mais je n'aime pas la syntaxe de Linq, d'abord c'est vraiment spécifique a MS et pour moi c'est presque aussi peu lisible qu'un regexp !

    D'accord on peut peut etre ecrire en une ligne ce qui en prendrait 3 ou quatre mais je ne suis pas convaincu qu'on y gagne vraiment

    - en lisibilité
    - en performance
    - en facilité de debuguage

    mais c'est sans doute un autre débat
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

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

Discussions similaires

  1. [C#] Probleme de lecture de valeur nulle
    Par kenzo080 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 25/10/2010, 16h58
  2. Probleme de lecture d'image
    Par NicolasR dans le forum Java ME
    Réponses: 13
    Dernier message: 28/07/2005, 14h47
  3. [xml]probleme de lecture
    Par mavina dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 22/07/2005, 08h34
  4. Probleme de lecture de classe
    Par wkd dans le forum Composants
    Réponses: 5
    Dernier message: 21/05/2004, 15h20
  5. [LG]probleme de lecture de base de données
    Par jf dans le forum Langage
    Réponses: 14
    Dernier message: 26/06/2003, 15h57

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