koubiac94
Messages postés10Date d'inscriptionlundi 15 mars 2004StatutMembreDernière intervention 6 octobre 2008
-
3 oct. 2008 à 11:20
koubiac94
Messages postés10Date d'inscriptionlundi 15 mars 2004StatutMembreDerniè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"?>
<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
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).
NHenry
Messages postés15151Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 4 septembre 2024159 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).
koubiac94
Messages postés10Date d'inscriptionlundi 15 mars 2004StatutMembreDerniè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