Parser un ficher XML puis remplir une listbox

[Résolu]
Signaler
-
Messages postés
16129
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 juillet 2021
-
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

Messages postés
16129
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 juillet 2021
556
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
Messages postés
16129
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 juillet 2021
556
Bonsoir,

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


Whismeril

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.

Merci je vais regarder.
Messages postés
16129
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 juillet 2021
556
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

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é.
Messages postés
16129
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 juillet 2021
556
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
Messages postés
16129
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 juillet 2021
556
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

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.
Messages postés
16129
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 juillet 2021
556
Bonjour,

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


Whismeril