Probleme de lecture xml

[Résolu]
Signaler
Messages postés
10
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
6 octobre 2008
-
Messages postés
10
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
6 octobre 2008
-
Bonjour, je souhaite lire un fichier xml afin de remplir une listbox avec uniquement le paramêtre "nom" du fichier ci dessous
<?xml version= "1.0" encoding="utf-8"?>

   <genre>Jeux</genre>
    <nom>iPeriod</nom>
    <version>1.1</version>
    348.63 Kb

    <descriptif>coucou texte de l'appli</descriptif>
    iperiod_ico.png
    <screens>iperiod1.jpg</screens>

Pour ce faire voici mon code vb.net mais il m'affiche la totalité des noeuds dans la list box :( et pas seulement le nom

Public Class Form1
    Public Class Appli
        Public Genre As String
        Public Nom As String
        Public Version As String
        Public Poids As String
        Public Descriptif As String
        Public Icone As String
        Public Screens As String

        ' Pour que le nom s'affiche dans la ListBox:
        Public Overrides Function ToString() As String
            Return Nom
        End Function
    End Class

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Charger le document XML
        Dim doc As New Xml.XmlDocument
        doc.Load("C:\testxml.xml")
        ' Parcourir chaque éléments se trouvant dans la node "Voiture"
        For Each elem As Xml.XmlElement In doc.DocumentElement("applis").ChildNodes
            ' Création d'une classe voiture et attribution des valeurs
            Dim appli As New Appli
            appli.Genre = elem.InnerText
            appli.Nom = elem.InnerText
            appli.Version = elem.InnerText ' Valeur
            appli.Poids = elem.InnerText
            appli.Descriptif = elem.InnerText
            appli.Icone = elem.InnerText
            appli.Screens = elem.InnerText
            ' Ajout à la ListBox
            ListBox1.Items.Add(appli.Nom)
        Next
    End Sub
End Class

Merci à toute les personnes pouvant m'aider.
top code

12 réponses

Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

Normal :

appli.Genre = elem.InnerText
appli.Nom = elem.InnerText
appli.Version = elem.InnerText ' Valeur
appli.Poids = elem.InnerText

Dans toutes ces variables, tu as les même données ... regarde les enfants et remplis ton objet en consequence.

Astuce, dans ton code, tu mets :
ListBox1.Items.Add(appli.Nom)
Si tu redéfinit le ToString de Appli (Overrides), tu peux juste faire :
ListBox1.Items.Add(appli)

Et ensuite, dans la collection des éléments du ListBox, tu as directement ton objet (à caster).

http://nhen0039.chez-alice.fr/index.php
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

Je revois une partie de ton code :

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' Charger le document XML
    Dim lListeAppsXml As New Xml.XmlDocument
    lListeAppsXml.Load("C:\testxml.xml")
    Dim lElements As XmlNodeList
    Dim lAppli As Appli
    lElements = lListeAppsXml.DocumentElement.GetElementsByTagName("appli")

    For Each lNoeud as XmlNode In lElements
        lAppli=new Appli
        For Each lNoeudEnf as XmlNode In lNoeud.ChildNodes
            select case lNoeudEnf.LocalName.tolower
                case "genre"
                    appli.Genre = noeudEnf.InnerText
                case "nom"
                    appli.Nom = noeudEnf.InnerText
            End select
        Next
        ListBox1.Items.Add(lAppli)
    Next
End Sub

Inspires-toi de cela.
Penses à nommer tes controles (ListBox1, c'est pas très parlant, préfère un truc du style "LstProgrammes").

Pour ta classe, préfère utiliser des propriétés :

Public Class Appli
    Private mNom As String
    Private mGenre As String
   
    public property Nom as String
        Get
            return mNom
        end get
        set(byval pValue as string)
            mnom=pvalue
        end set
    End property
   
    public property Genre as String
        Get
            return mGenre
        end get
        set(byval pValue as string)
            mGenre=pvalue
        end set
    End property
   
    ' Pour que le nom s'affiche dans la ListBox:
    Public Overrides Function ToString() As String
        Return mNom
    End Function
End Class

Tu pourras controler plus facilement l'assignation (éviter les valeurs hors plage autorisées).

http://nhen0039.chez-alice.fr/index.php
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

Dans oles options de ton projet, mets Option Explicit à On.

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ListBox1.SelectedIndexChanged

        Dim appli As Appli = directcast(ListBox1.SelectedItem
,Appli)
        Label6.Text = appli.Nom

        MsgBox(appli.Nom)

End Sub

Je ne vois rien dans ce code qui me choque. Pas vraiment le temps de tester pour l'instant.
(Rappel, je n'ai pas Inet le WE.)

http://nhen0039.chez-alice.fr/index.php
Messages postés
10
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
6 octobre 2008

bonjour,

Merci a toi je teste de ce pas

top code
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

Evite les messages en pv stp.

De tête, ça doit être :
elem.child
ou un truc du genre, à toi de voir comment l'utiliser (utilises l'aide au besoin, tout y est).

http://nhen0039.chez-alice.fr/index.php
Messages postés
10
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
6 octobre 2008

Oops désolé.
J'ai bien reussi à remplir ma liste mais a présent je n'arrive pas a charger les valeurs selon le changement de choix dans la liste. Il m'affiche toutjours la derniere entrée de la liste quel que soit mon choix :(

Ps: Je n'ai pas saisi ton astuce de code

Voici mon nouveau code.
Public Class Form1
Public Class Appli
Public Nom As String
Public Genre As String


' Pour que le nom s'affiche dans la ListBox:
Public Overrides Function ToString() As String
Return Nom
End Function
End Class

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Charger le document XML

Dim listeappsxml As New Xml.XmlDocument
listeappsxml.Load("C:\testxml.xml")
Dim element As XmlNodeList
Dim noeud, noeudEnf As XmlNode
Dim appli As New Appli
element = listeappsxml.DocumentElement.GetElementsByTagName("appli")

For Each noeud In element
For Each noeudEnf In noeud.ChildNodes
If noeudEnf.LocalName = "genre" Then
appli.Genre = noeudEnf.InnerText
Else
If (noeudEnf.LocalName = "nom") Then
appli.Nom = noeudEnf.InnerText

End If
End If
Next
ListBox1.Items.Add(appli)
Next
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
Dim appli As Appli = ListBox1.SelectedItem
Label6.Text = appli.Nom
MsgBox(appli.Nom)
End Sub
End Class
Messages postés
10
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
6 octobre 2008

Merci beaucoup
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

Si ton pb est résolu, pense à marquer "Réponses acceptées" sur la/les réponse(s) qui t'ont aidée(s).

http://nhen0039.chez-alice.fr/index.php
Messages postés
10
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
6 octobre 2008

Ok désolé je suis nouveau sur le forum
Messages postés
10
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
6 octobre 2008

Je suis vraiment un boulet mais je n'arrive toujours pas a changer le nom d'un label en fonction de l'item selectionné dans la liste (désolé) :(
Messages postés
10
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
6 octobre 2008

Help s'il vous plait j'ai vraiment besoin de cette aide.

MErci
Messages postés
10
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
6 octobre 2008

Un grand grand merci à toi super tout fonctionne

Bravo et encore merci