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

VB.NET Discussion :

Problème lecture XML


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Furr
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut Problème lecture XML
    Bonjour,

    Je rencontre un léger souci de lecture XML, je n'arrive pas à sélectionner les noeuds nécessaires au traitement que je souhaite effectuer. Le problème est que les méthodes SelectNodes et SelectSingleNode de mon XMLDocument ne me retourne jamais rien

    Voici la structure de mon fichier XML :

    Code XML : 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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <file:ProcessType>
      <context confirmationNeeded="false" name="DEV">
        <contextParameter comment="" name="unNom" />
        <!-- d'autres contextParameter -->
      </context>
      <parameter>
        <elementParameter comment="" name="unAutreNom" />
        <!-- d'autres elementParameter -->
      <node>
        <elementParameter comment="" name="unAutreNom" />
        <!-- d'autres elementParameter -->
      </node>
      <node>
        <elementParameter comment="" name="unAutreNom" />
        <!-- d'autres elementParameter -->
      </node>
    </file:ProcessType>

    Je lis les informations contenus dans les balises context et parameters avec un XMLTextReader, pas de soucis pour ça, ça fonctionne bien.
    Mais dans la seconde partie de mon algo, je souhaite récupérer l'ensemble des noeuds "node", afin de lire tous les noeuds enfants elementParameter.
    Une version épurée de mon code ressemble à ceci :

    Code VB.NET : 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
     
        Public Sub getJob(ByVal filepath As String)
            Dim xml As New XmlDocument()
            xml.Load(filepath) ' filepath étant le chemin de mon fichier XML
     
            Dim xmlComponentList As XmlNodeList = xml.DocumentElement.SelectNodes("node")
            For Each xmlComponent As XmlNode In xmlComponentList
               'Ici un traitement quelconque
               '
               '
               ' Puis la boucle sur les noeuds enfants
               For Each elementParameter As XmlNode In xmlComponent.ChildNodes
                   ' Un autre traitement
               Next
            Next
            '
            '
            '
       End Sub

    C'est donc la méthode SelectNodes qui semble poser problème. J'ai également essayé de l'appeler directement depuis l'objet "xml", et non sur son DocumentElement. En vain.

    A noter que le fichier est bien chargé dans le XMLDocument, je vois bien dans
    son InnerXML l'ensemble du fichier, mais impossible d'en récupérer uniquement le noeud voulu...

    Serait-il possible que vous jetiez un coup d'oeil, et m'éclairer sur ce qui ne va pas ?

    Merci d'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    l'expression Xpath doit indiquer un chemin de localisation explicite.
    Soit par exemple rechercher les nœuds "node" descendants de l'élément racine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim xmlComponentList As XmlNodeList = xml.DocumentElement.SelectNodes("descendant::node")
    Syntaxe verbeuse, en abrégé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim xmlComponentList As XmlNodeList = xml.DocumentElement.SelectNodes("//node")

  3. #3
    Membre confirmé Avatar de Furr
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Aucun changement même avec ce changement de syntaxe

  4. #4
    Membre confirmé Avatar de Furr
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Bon du coup, pour pas passer mon temps à chercher pourquoi le SelectNodes ne passe pas, j'ai opter pour un contournement.
    Je parcours les noeuds enfants de mon DocumentElement, jusqu'à trouver les noeuds que je veux, et je créé ma liste moi-même.
    C'est un peu réinventer la roue, mais au moins ça marche...

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            Dim nodeList As New List(Of XmlNode)
            For Each node As XmlNode In _xml.DocumentElement.ChildNodes
                Select Case node.Name
                    '
                    '
                    Case "node"
                        nodeList.Add(node)
                    '
                End Select
            Next

    Je peux de cette manière effectuer ensuite mon traitement avec les noeuds "node"

    Merci à chrismonoye et à ceux qui se sont intéressés au problème

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

Discussions similaires

  1. problème lecture xml sous internet explorer
    Par forst dans le forum Web
    Réponses: 7
    Dernier message: 02/07/2013, 16h48
  2. Problème lecture xml avec XML::SIMPLE
    Par chalu133 dans le forum Langage
    Réponses: 1
    Dernier message: 05/12/2012, 16h12
  3. [JDOM] Problème lecture XML
    Par Mhira dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 29/05/2012, 21h50
  4. Problème lecture XML
    Par David_Geek dans le forum VBScript
    Réponses: 6
    Dernier message: 02/01/2010, 16h33
  5. Problème lecture XML
    Par linkman dans le forum C#
    Réponses: 2
    Dernier message: 19/09/2008, 11h53

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