Parser un ficher XML puis remplir une listbox

Résolu
Utilisateur anonyme - 21 juin 2012 à 19:23
Whismeril
Messages postés
17652
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2022
- 23 juin 2012 à 09:39
Bonsoir,

Je souhaite remplir une listbox (ou un combobox je ne sais pas encore) en sélectionnant une donnée précise dans un fichier XML.

Mon XML se présente de cette façon:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Targetlist>
<Targets>
<Target
Name="AAA"
Type="DBG_DEX"
IPAddress="192.168.24.243"
Port="000003E8"/>


J’essaie de récupérer uniquement le Name de chaque target référencées dans le fichier pour les afficher dans la listbox.

Le soucis au niveau du code c'est que je bloque après avoir chargé le fichier.


Quelqu'un à une idée ? :)

Merci beaucoup.

10 réponses

Whismeril
Messages postés
17652
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2022
612
21 juin 2012 à 19:57
Tu as cette discussion comme exemple de line, ou encore celle-ci.

Une fois que tu as la liste de données, tu l'affectes au datasource de ta listbox et tu mets la bonne propriété au datameber (pour l'affichage)


Whismeril
3
Whismeril
Messages postés
17652
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2022
612
21 juin 2012 à 19:26
Bonsoir,

peux tu mettre le code avec lequel tu charge ton fichier?


Whismeril
0
Utilisateur anonyme
21 juin 2012 à 19:42
Bonsoir,

JE viens quitter mon bureau. :(

J'étais en train d'utiliser XDocument. Avec un point d'arrêt je peux voir qu'il lit bien le fichier mais après je ne vois pas comment faire.
Ça n'a pas d'importance d'utiliser Linq ou pas.

Après je suis peut être mal partie aussi.. :)

Merci.
0
Utilisateur anonyme
22 juin 2012 à 09:42
Merci je vais regarder.
0

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

Posez votre question
Whismeril
Messages postés
17652
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2022
612
22 juin 2012 à 10:55
Si tu souhaites, afficher les Noms dans ta liste, puis quand tu cliques sur une entrée voir le type l'ip et le port dans des textbox, tu peux te servir d'un databindingsource


Whismeril
0
Utilisateur anonyme
22 juin 2012 à 11:33
Voila le code je viens de faire à partir du 2ème lien.

        public string TgName { get; set; }
        public string Type { get; set; }

        private List<frmMainMenu> myTargets = new List<frmMainMenu>();


        private void frmMainMenu_Load(object sender, EventArgs e)
        {
            XDocument xDoc = XDocument.Load(string.Format(@"blabla.xml", Application.StartupPath));

            myTargets = (from target in xDoc.Descendants("Target")//directement la balise qui contient les données d'une seule instance de target
                         select new frmMainMenu
                         {
                             TgName = target.Element("Target").Attribute("Name").Value, //on va chercher l'attribut
                             Type = target.Element("Target").Attribute("Type").Value, //on va chercher l'attribut
                         }
                        ).ToList<frmMainMenu>();//on en fait une liste


Et ensuite je fais listTargets.DataSource = myTargets; mais il ne passe pas dedans.

Je n'arrive pas à comprendre où je me suis trompé.
0
Whismeril
Messages postés
17652
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2022
612
22 juin 2012 à 11:46
Je pense qu'il vaut mieux que tu écrives une classe dédiée pour

        
    public class toto
    {
        public string TgName { get; set; }
        public string Type { get; set; }
    }


Et donc une list de cette classe toto.
Si tu ne mets pas TgName au datameber, tu verras la valeur de ToString dans la list soit .....toto.


Whismeril
0
Whismeril
Messages postés
17652
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2022
612
22 juin 2012 à 11:49
Ha et là
myTargets = (from target in xDoc.Descendants("Target")//directement la balise qui contient les données d'une seule instance de targ

ça doit être
xDoc.Descendants("Targets")



Whismeril
0
Utilisateur anonyme
22 juin 2012 à 12:46
C'est bon ça fonctionne. :)

        private void frmMainMenu_Load(object sender, EventArgs e)
        {

            XDocument xDoc = XDocument.Load(string.Format("blabla.xml", Application.StartupPath));

            myTargets = (from Target in xDoc.Descendants("Targets").Descendants("Target")//directement la balise qui contient les données d'une seule instance de target
                         select new TargetsPS3
                         {
                             TgName = Target.Attribute("Name").Value, //on va chercher l'attribut
                             //Type = Target.Attribute("Type").Value, //on va chercher l'attribut
                         }

                         

                         ).ToList<TargetsList>();//on en fait une liste

            listTargets.BindingContext = new BindingContext();
            listTargets.DataSource = myTargets;
            listTargets.DisplayMember = "TgName";


Il manquait un Descendants en fait, il ne trouvait pas les targets.

Je note pour les databindingsource.

Merci.
0
Whismeril
Messages postés
17652
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2022
612
23 juin 2012 à 09:39
Bonjour,

de rien, clique sur le bouton réponse accepté pour d'autres utilisateurs ayant un même problème


Whismeril
0