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

 .NET Discussion :

XPATH > une boucle sur des noeuds enfants ?


Sujet :

.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 72
    Points : 66
    Points
    66
    Par défaut XPATH > une boucle sur des noeuds enfants ?
    bonjour,

    j'ai un xml suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0"?>
    <root>
    	<config>
    		<debug>
    			<MODE_DEBUG>OUI</MODE_DEBUG>
    			<MODE_DEMO>NON</MODE_DEMO>
    			<MAX_LINE>100</MAX_LINE>
    		</debug>
    		<network>
    		</network>
    	</config>
    </root>
    j'aimerais avec une boucle survoler tous les nodes contenue dans DEBUG.


    j'ai le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                Dim doc As XPathDocument = New XPathDocument(Filename)
                Dim nav As XPathNavigator = doc.CreateNavigator()
                Dim iter As XPathNodeIterator
     
     
    ' récupère un XPathNodeIterator sur les Record
                iter = nav.Select("/root/config/debug")
     
                iter.MoveNext()
    mais ensuite je n'arrive pas a effctuer une boucle sur les noms des nodes enfants: MODE_DEBUG, MODE_DEMO, MAX_LINE.


    Comment il faut'il si prendre ?


    Merci pour votre aide.
    Thierry

  2. #2
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Sans passer par du XPath, si tu veux faire une boucle tu peux passer par un XmlTextReader : http://msdn.microsoft.com/en-us/libr...xmlreader.aspx

    Et si tu bosses avec le framework 3.0 ou 3.5, utilise Linq, ça sera beaucoup plus simple :p

  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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Ton expression XPath n'est pas bonne, elle sélectionne juste le noeud <debug>. Pour que Select renvoie les noeuds enfants de <debug>, utilise ça : "/root/config/debug/*"

    Et pour boucler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While iter.MoveNext()
        Console.WriteLine("{0} : {1}", iter.Current.Name, iter.Current.Value)
    End While

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 72
    Points : 66
    Points
    66
    Par défaut
    Merci laedit,


    ok, Merci pour la piste. Je travaille avec le framework2.0

    j'ai donc ecrit le code VB .net 2 suivant:
    (il permet de lire un fichier de paramètre, format 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     ' Lecture du fichier de configuration (Format XML)
        Sub LoadSetting(ByVal Filename As String)
            ' Tutorial sur : http://selkis.developpez.com/tutoriels/dotnet/Xmlpart1/
     
            Dim XmlDoc As XmlDocument = New XmlDocument()
            Dim TypeParametre As XmlNodeList
            Dim node As XmlNode
     
            XmlDoc.Load(Filename)
     
            TypeParametre = XmlDoc.DocumentElement.GetElementsByTagName("debug")
     
            ' *** Parcours des parametres de configuration du type "debug"   ****
            For Each node In TypeParametre.ItemOf(0).ChildNodes
                MainForm.debug("Le paramétre " & node.LocalName & " a la valeur " & node.InnerText)
                Select Case node.LocalName
                    Case "MODE_DEBUG"
                        If node.InnerText = "OUI" Then
                            Cnf.Debug.Enable = True
                        Else
                            Cnf.Debug.Enable = False
                        End If
     
                    Case "MODE_DEMO"
                        If node.InnerText = "OUI" Then
                            Cnf.Debug.ModeDemo = True
                        Else
                            Cnf.Debug.ModeDemo = False
                        End If
     
                    Case "MAX_LINE"
                        g_conv.StrToInt(node.InnerText)
     
                    Case Else
                        MainForm.debug("WARNING: Paramétre [" & node.LocalName & "] non connu", Color.Red)
                End Select
            Next
     
     
            ' *** Parcours des parametres de configuration du type "network"   ****
     
        End Sub

    Deux questions:
    comment effectuer pour être certains que l'on pointe bien sur <root> <config><debug> ?


    Quelle est la différence entre noeudEnf.LocalName et noeudEnf.Name ?

    Thierry

  5. #5
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Pour ta première question, tu peux vérifier via la propriété Name.

    Pour ta seconde :
    - LocalName : En cas de substitution dans une classe dérivée, obtient le nom local du nœud.

    - Name : En cas de substitution dans une classe dérivée, obtient le nom qualifié du nœud.

    Via MSDN : http://msdn.microsoft.com/fr-fr/libr...e_members.aspx

  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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    @mastronic: on a posté quasiment en même temps, je pense pas que tu aies vu ma réponse (#3)...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 72
    Points : 66
    Points
    66
    Par défaut
    Ha ben tomlev, je viens de voir ton post

    un collègue fait du xsl, et donc du xpath .. il m'a fait la même remarque...


    mon code (VB .net2) devient donc:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
        ' Lecture du fichier de configuration (Format XML)
        Sub LoadSetting(ByVal Filename As String)
     
            Try
                Dim doc As XPathDocument = New XPathDocument(Filename)
                Dim nav As XPathNavigator = doc.CreateNavigator()
                Dim iter As XPathNodeIterator
     
                ' *** Parametre de type debug  ***
                iter = nav.Select("/root/config/debug/*")
     
                While iter.MoveNext()
                    MainForm.debug("Le paramétre " & iter.Current.Name & " a la valeur " & iter.Current.Value)
                    Select Case iter.Current.Name
                        Case "MODE_DEBUG"
                            If iter.Current.Value = "OUI" Then
                                Cnf.Debug.Enable = True
                            Else
                                Cnf.Debug.Enable = False
                            End If
     
                        Case "MODE_DEMO"
                            If iter.Current.Value = "OUI" Then
                                Cnf.Debug.ModeDemo = True
                            Else
                                Cnf.Debug.ModeDemo = False
                            End If
     
                        Case "MAX_LINE"
                            g_conv.StrToInt(iter.Current.Value)
     
                        Case Else
                            MainForm.debug("WARNING: Paramétre [" & iter.Current.Name & "] non connu", Color.Red)
                    End Select
                End While
     
     
                ' *** Parametre de type "network"  ***
                iter = nav.Select("/root/config/network/*")
     
     
     
            Catch ex As XPathException
                System.Console.WriteLine("XMLException: " + ex.Message)
            Catch ex As Exception
                System.Console.WriteLine("Exception: " + ex.Message)
            End Try
     
        End Sub


    Merci pour votre aide précieuse.
    passer un bon week end.

    Thierry

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

Discussions similaires

  1. Faire une boucle sur des OptionButton d'une feuille dans une userform
    Par Marty57070 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/06/2015, 07h23
  2. [XL-2010] Fair une boucle sur des objets Ranges
    Par Escorpion dans le forum Excel
    Réponses: 6
    Dernier message: 18/03/2015, 18h14
  3. [HF15] realiser une boucle sur des fichiers et des rubriques de BD
    Par emmanuel Zoti Bi dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 03/08/2013, 12h20
  4. Une boucle sur des dates
    Par Nowwis dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 29/08/2009, 11h51
  5. Faire une boucle sur des labels ou textBox
    Par Actarusdu60 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/12/2008, 18h17

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