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

Windows Forms Discussion :

Recuperer les elements d'un XML


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut Recuperer les elements d'un XML
    Salut
    je suis pas trop doué pour ce qui concerne la manipulation des fichiers XML en vb.net
    bref
    mon probleme le voila:
    je veux recuperer les elements d'un fichier XML :

    Exemple:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <products>
              <product>
                      <id>1</id>
                      <price>50</price>
                      <vendor>text</vendor>
              </product>
     
              <order>
                      <id>10</id>
              </order>
    </products>



    1-je veux recuperer l'element racine
    2-je veux recuperer le(s) element(s) du noeud product (id, price, vendor)
    3-je veux recuperer le(s) element (s) du noeud order(id)



    bon j'ai pu faire un bout de code qui marche pas mal; mais le probleme dans ce code c'est que je dois connaitre le nombre des elements que j'ai


    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
     ' creation d'une nouvelle instance du membre xmldocument
            Dim XmlDoc As XmlDocument = New XmlDocument()
            'Chargement du fichier XMl
            XmlDoc.Load("chemin fichier xml")
            'Declaration d'une liste de Noeud
            Dim xmlnodeList As XmlNodeList
     
            xmlnodeList = XmlDoc.ChildNodes
     
            MsgBox(xmlnodeList.ItemOf(0).ChildNodes.ItemOf(0).Name)
            MsgBox(xmlnodeList.ItemOf(0).ChildNodes.ItemOf(1).Name)
     
            MsgBox(xmlnodeList.ItemOf(0).ChildNodes.ItemOf(0).ChildNodes.ItemOf(0).Name)
            MsgBox(xmlnodeList.ItemOf(0).ChildNodes.ItemOf(0).ChildNodes.ItemOf(1).Name)
            MsgBox(xmlnodeList.ItemOf(0).ChildNodes.ItemOf(0).ChildNodes.ItemOf(2).Name)
    est ce qu'il existe un moyen pour regler ce prb ?
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    Déjà première chose tu peux utiliser une boucle pour parcourir les éléments d'un même niveau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For Each element In XmlDoc.ChildNodes
       MsgBox(element.Name)
    Next
    Maintenant pour progresser en profondeur dans ton arborescence, utilise la récursivité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Sub ParcourirElement(ByVal element as XmlElement)
       Dim elem As XmlElement
     
       For Each elem In element.ChildNodes
          MsgBox(elem.Name)
          If elem.ChildNodes.Count > 0 Then
             ParcourirElement(elem)
          End If
       Next
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    Tout dabord je vous remercie de m'avoir repondu ce qui n'est pas le cas dans les autres Forum.


    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
     
    ' creation d'une nouvelle instance du membre xmldocument
            Dim XmlDoc As XmlDocument = New XmlDocument()
     
            'Chargement du fichier XMl
            XmlDoc.Load(fileName)
     
            'Declaration d'une liste de Noeud
            Dim xmlnodeList As XmlNodeList
     
     
            'Parcouri le fichier XML et afficher l'lement Racine
            xmlnodeList = XmlDoc.ChildNodes
            For Each element In XmlDoc.ChildNodes
                MsgBox(element.Name)
            Next
     
     
     
     'Parcouri le fichier XML et afficher les autres elements
            Dim myxmlelement As XmlElement = XmlDoc.DocumentElement
     
            ParcourirElement(myxmlelement)
     
     
     
    'La fonction
     
     
    Public Sub ParcourirElement(ByVal element As XmlElement)
     
            Try
                Dim elem As XmlElement
                For Each elem In element.ChildNodes
                    MsgBox(elem.Name)
                    If elem.ChildNodes.Count > 0 Then
                        ParcourirElement(elem)
                    End If
                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub


    Bon voila le code quand j'execute la 1ere partie marche impek j'arrive a afficher l'lement racine mais pour le reste j'arrive a afficher les autres element par la fonction mais ya une exception quii se genere entre chaque affichage d'element

    je sais pas trop pourquoi!!
    Merci d'avance

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    Quand je modifie mon XML de telle sorte :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <products>
              <product>
                      <id/>
                      <price/>
                      <vendor/>
              </product>
     
              <order>
                      <id/>
              </order>
    </products>

    j'obtiens tous les champs sans aucun probleme; si ca peut vous etre util

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Par défaut
    Tu trouveras moulte tuto (sur ce site entre autres) sur comment parser un fichier XML,

    les deux grandes instructions sont

    x = xmlDoc.Childnodes(y).childNodes(z)....childNodes(n).count => connaitre le nombre de données qu'il y a sur un niveau

    texte = xmlDoc.childNodes(0).childNodes(3).childNodes(1).text => récupérer la valeur


    après, pour gagner du temps pour l'ajout d'un jeu de données, j'ai une technique, je crée un jeu modèle et j'utilise cloneNode pour le dupliquer et je viens écrire après la valeur qui m'interresse.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    Citation Envoyé par Ya7yaKech Voir le message
    Bon voila le code quand j'execute la 1ere partie marche impek j'arrive a afficher l'lement racine mais pour le reste j'arrive a afficher les autres element par la fonction mais ya une exception quii se genere entre chaque affichage d'element

    je sais pas trop pourquoi!!
    Merci d'avance
    Quelle est l'exception levée (type + message) ?

    Merci

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    titre :L'exception InvalidCastException n'a pas été gérée

    Impossible d'effectuer un cast d'un objet de type 'System.Xml.XmlText' en type 'System.Xml.XmlElement'.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    Je me suis trompé. Il ne faut pas utiliser XmlElement mais XmlNode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Sub ParcourirElement(ByVal noeudParent as XmlNode)
       Dim noeudEnfant As XmlNode
     
       For Each noeudEnfant In noeudParent.ChildNodes
          MsgBox(noeudEnfant.Name)
          If noeudEnfant.ChildNodes.Count > 0 Then
             ParcourirElement(noeudEnfant)
          End If
       Next
    End Sub

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

Discussions similaires

  1. recuperer les elements cochés
    Par zaineb.z dans le forum ASP.NET
    Réponses: 2
    Dernier message: 05/05/2008, 19h52
  2. Réponses: 1
    Dernier message: 27/07/2006, 14h43
  3. [ASP][DOM] Récupérer les éléments d'un XML
    Par Tikate dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 03/05/2006, 11h51
  4. Récupérer les élements d'une structure ...
    Par Franck.H dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 17/10/2005, 15h48
  5. [VB6] [FileListBox] Récupérer les éléments sélectionnés
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/10/2002, 09h11

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