Probleme de lecture xml

Résolu
koubiac94 Messages postés 10 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 6 octobre 2008 - 3 oct. 2008 à 11:20
koubiac94 Messages postés 10 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 6 octobre 2008 - 6 oct. 2008 à 10:18
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

NHenry Messages postés 15151 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 septembre 2024 159
3 oct. 2008 à 13:36
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
3
NHenry Messages postés 15151 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 septembre 2024 159
3 oct. 2008 à 15:13
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
3
NHenry Messages postés 15151 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 septembre 2024 159
6 oct. 2008 à 09:24
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
3
koubiac94 Messages postés 10 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 6 octobre 2008
3 oct. 2008 à 13:58
bonjour,

Merci a toi je teste de ce pas

top code
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15151 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 septembre 2024 159
3 oct. 2008 à 14:19
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
0
koubiac94 Messages postés 10 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 6 octobre 2008
3 oct. 2008 à 14:40
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
0
koubiac94 Messages postés 10 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 6 octobre 2008
3 oct. 2008 à 15:18
Merci beaucoup
0
NHenry Messages postés 15151 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 septembre 2024 159
3 oct. 2008 à 15:28
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
0
koubiac94 Messages postés 10 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 6 octobre 2008
3 oct. 2008 à 16:02
Ok désolé je suis nouveau sur le forum
0
koubiac94 Messages postés 10 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 6 octobre 2008
3 oct. 2008 à 17:20
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é) :(
0
koubiac94 Messages postés 10 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 6 octobre 2008
3 oct. 2008 à 17:48
Help s'il vous plait j'ai vraiment besoin de cette aide.

MErci
0
koubiac94 Messages postés 10 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 6 octobre 2008
6 oct. 2008 à 10:18
Un grand grand merci à toi super tout fonctionne

Bravo et encore merci
0
Rejoignez-nous