IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Quelles sont les bonnes pratiques pour la lecture d'un fichier XML en c#?


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut Quelles sont les bonnes pratiques pour la lecture d'un fichier XML en c#?
    bonjour tout le monde, je viens encore polluer le forum avec mes questions XD
    bon, voila la question du jour : pourriez-vous m'aider à lire ce fichier XML, s.v.p ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    <classe>
    	<numClasse></numClasse>
    	<libClasse></libClasse>
     
    	<lesMatieres>
    		<uneMatiere>
    			<numMatiere></numMatiere>
    			<libMatiere></libMatiere>
    			<coeffMatiere></coeffMatiere>
    		</uneMatiere>
    		<uneMatiere>
    			<numMatiere></numMatiere>
    			<libMatiere></libMatiere>
    			<coeffMatiere></coeffMatiere>
    		</uneMatiere>
    	</lesMatieres>
     
    	<lesEleves>
    		<unEleve>
    			<numELeve></numEleve>
    			<nomELeve></nomEleve>
    			<prenomELeve></prenomELeve>
    			<uneNote>
    				<numNote></numNote>
    				<valeurNote></valeurNote>
    				<dateNote></dateNote>
    				<coeffNote></coeffNote>
    				<numMatiereNote></numMatiereNote>
    			</uneNote>
    			<uneNote>
    				<numNote></numNote>
    				<valeurNote></valeurNote>
    				<dateNote></dateNote>
    				<coeffNote></coeffNote>
    				<numMatiereNote></numMatiereNote>
    			</uneNote>
    			<uneAppreciation>
    				<numAppreciation></numAppreciation>
    				<libAppreciation></libAppreciation>
    				<numMatiereAppr></numMatiereAppr>
    			</uneAppreciation>
    			<uneAppreciation>
    				<numAppreciation></numAppreciation>
    				<libAppreciation></libAppreciation>
    				<numMatiereAppr></numMatiereAppr>
    			</uneAppreciation>
    		</unEleve>
    		<unEleve>
    			<numELeve></numEleve>
    			<nomELeve></nomEleve>
    			<prenomELeve></prenomELeve>
    			<uneNote>
    				<numNote></numNote>
    				<valeurNote></valeurNote>
    				<dateNote></dateNote>
    				<coeffNote></coeffNote>
    				<numMatiereNote></numMatiereNote>
    			</uneNote>
    			<uneNote>
    				<numNote></numNote>
    				<valeurNote></valeurNote>
    				<dateNote></dateNote>
    				<coeffNote></coeffNote>
    				<numMatiereNote></numMatiereNote>
    			</uneNote>
    			<uneAppreciation>
    				<numAppreciation></numAppreciation>
    				<libAppreciation></libAppreciation>
    				<numMatiereAppr></numMatiereAppr>
    			</uneAppreciation>
    			<uneAppreciation>
    				<numAppreciation></numAppreciation>
    				<libAppreciation></libAppreciation>
    				<numMatiereAppr></numMatiereAppr>
    			</uneAppreciation>
    		</unEleve>		
    	</lesEleves>
    </classe>
    j'aimerai savoir s'il serait possible d'utiliser une sorte de boucle foreach pour lire les différents nœuds...

    j'aurais d'autres questions après.
    Voici mon code actuel, vous l'aurez deviné, je ne suis pas allé bien loin, lol.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public void chargementFICHIER_XML(string nomFichier)
    {
        ClClasseEleve uneClasse;
        ClMatiere uneMatiere;
     
        StreamReader sr = new StreamReader("H:\\PTI\\carnet de notes\\BulletinScolaire\\" + nomFichier);
        string Ligne;
        Ligne = sr.ReadLine();
        while (Ligne != null)
        {
            string numClasse;
            string libClasse;
     
            Ligne = Ligne.Substring(13);
            numClasse = Ligne.Substring(0, Ligne.IndexOf("</numClasse>"));
            Ligne = Ligne.Substring(Ligne.IndexOf("<libClasse>") + 6);
            libClasse = Ligne.Substring(0, Ligne.IndexOf("</libClasse>"));
     
            uneClasse = new ClClasseEleve(numClasse,libClasse);
        }
    }
    merci à l'avance pour votre aide
    cordialement

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Effectivement, c'est pas vraiment optimisé. Il existe des classes prévues pour lire les fichiers Xml:
    • XmlDocument avec XPath (petits fichiers)
    • XmlTextReader (gros fichiers)
    • XmlReader (gros fichiers)
    Il y a des tutos ici: http://xml.developpez.com/cours/

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci pour la réponse, je suis allé voir les cours...
    j'ai un peu de mal à comprendre mais je persévère ^^

    merci encore,

    je reviendrais plus tard pour d'autres questions

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    salut, je reviens pour poster quelques lignes de code.
    voici le procédure de sauvegarde de mon application. a priori, elle n'a pas de probleme, mais qui sait ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    public void Sauvegarde_XML()
    {
    	int nbMatiere;
    	int nbEleve;
    	ClMatiere uneMatiere;
    	ClEleve unEleve;
     
    	int nbNotes;
    	ClNote uneNote;
    	ArrayList lesNotes;
     
    	int nbAppreciations;
    	ClAppreciation uneAppreciation;
    	ArrayList lesAppreciations;
     
     
    	StreamWriter sw = new StreamWriter("H:\\PTI\\carnet de notes	\\BulletinScolaire\\saveXML.xml");
     
    	// Debut de fichier XML, enregistrement de la classe
    	sw.WriteLine("<laClasse>");
    	sw.WriteLine("<numClasse>" + GetNumClasse() + "</numClasse>");
    	sw.WriteLine("<libClasse>" + GetlibClasse() + "</libClasse>");
     
    	// on enregistre les matières
    	nbMatiere = LesMatieres.Count;
    	if (nbMatiere > 0)
    	{
    		sw.WriteLine("<lesMatieres>");
    		for (int i = 0; i < nbMatiere; i++)
    		{
    			uneMatiere = ((ClMatiere)LesMatieres[i]);
     
    			sw.WriteLine("<uneMatiere>");
    			sw.WriteLine("<numMatiere>" + uneMatiere.GetNumMatiere() + "</numMatiere>");
    			sw.WriteLine("<libMatiere>" + uneMatiere.GetLibMatiere() + "</libMatiere>");
    			sw.WriteLine("<coeffMatiere>" + uneMatiere.GetCoeffMatiere() + "</coeffMatiere>");
    			sw.WriteLine("</uneMatiere>");
    		}
    		sw.WriteLine("<lesMatieres>");
    	}
     
    	// on enregistre les élèves
    	nbEleve = LesEleves.Count;
    	if (nbEleve > 0)
    	{
    		sw.WriteLine("<lesEleves>");
    		for (int i = 0; i < nbEleve; i++)
    		{
    			unEleve = ((ClEleve)LesEleves[i]);
     
    			sw.WriteLine("<unEleve>");
    			sw.WriteLine("<numEleve>" + unEleve.GetNumEleve() + "</numEleve>");
    			sw.WriteLine("<nomEleve>" + unEleve.GetNomEleve() + "</nomEleve>");
    			sw.WriteLine("<prenomEleve>" + unEleve.GetPrenomEleve() + "</prenomEleve>");
     
    			lesNotes = unEleve.GetLesNotes();
    			nbNotes = unEleve.GetNbNotes();
    			if (nbNotes > 0)
    			{
    				for (int j = 0; j < nbNotes; j++)
    				{
    					uneNote = ((ClNote)lesNotes[i]);
    					sw.WriteLine("<uneNote>");
    					sw.WriteLine("<numNote>" + uneNote.GetNumNote() + "</numNote>");
    					sw.WriteLine("<valeurNote>" + uneNote.GetValeurNote() + "</valeurNote>");
    					sw.WriteLine("<dateNote>" + uneNote.GetDateNote() + "</dateNote>");
    					sw.WriteLine("<coeffNote>" + uneNote.GetCoeffNote() + "</coeffNote>");
     
    					// la matiere pour cette note
    					uneMatiere = uneNote.GetLaMatiere();
    					sw.WriteLine("<numMatiereNote>" + uneMatiere.GetNumMatiere() + "</numMatiereNote>");
     
    					sw.WriteLine("</uneNote>");
    				}
    			}
     
    			lesAppreciations = unEleve.GetLesAppreciation();
    			nbAppreciations = unEleve.GetNbAppreciation();
    			if (nbAppreciations > 0)
    			{
    				for (int j = 0; j < nbAppreciations; j++)
    				{
    					uneAppreciation = ((ClAppreciation)lesAppreciations[i]);
    					sw.WriteLine("<uneAppreciation>");
    					sw.WriteLine("<numAppreciation>" + uneAppreciation.GetNumAppreciation() + "</numAppreciation>");
    					sw.WriteLine("<libAppreciation>" + uneAppreciation.GetLibAppreciation() + "</libAppreciation>");
     
    					// la matiere pour cette appreciation
    					uneMatiere = uneAppreciation.GetLaMatiere();
    					sw.WriteLine("<numMatiereAppr>" + uneMatiere.GetNumMatiere() + "</numMatiereAppr>");
     
    					sw.WriteLine("</uneAppreciation>");
    				}
    			}
    			sw.WriteLine("</unEleve>");
    		}
    		sw.WriteLine("<lesEleves>");
    	}
     
    	// Fin de fichier XML
    	sw.WriteLine("</laClasse>");
    	sw.Close();
    }
    Et voici le code pour recharger les infos contenus dans le fichier XML, c'est ici que j'ai le plus de soucis à me faire je pense ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    public void chargement_XML()
    {
    	ClClasseEleve uneClasse;
    	ClEleve unEleve;
    	ClNote uneNote;
    	ClAppreciation uneAppreciation;
    	ClMatiere laMatiereNote;
    	ClMatiere laMatiereAppr;
     
    	XPathDocument doc = new XPathDocument("H:\\PTI\\carnet de notes	\\BulletinScolaire\\saveXML.xml");
    	XPathNavigator nav = doc.CreateNavigator();
     
    	// on cré la classe
    	XPathNodeIterator RecClasse = nav.Select("classe");
    	while (RecClasse.MoveNext())
    	{
        		string numClasse = RecClasse.Current.SelectSingleNode("numClasse").Value;
        		string libClasse = RecClasse.Current.SelectSingleNode("libClasse").Value;
     
        		uneClasse = new ClClasseEleve(numClasse, libClasse);
    	}
     
    	// on cré les élèves
    	XPathNodeIterator RecEleve = nav.Select("classe/lesEleves/unEleve");
    	// Pour chaque matiere
    	while (RecEleve.MoveNext())
    	{
        		string numELeve = RecEleve.Current.SelectSingleNode("numELeve").Value;
        		string nomELeve = RecEleve.Current.SelectSingleNode("nomELeve").Value;
        		string prenomELeve = RecEleve.Current.SelectSingleNode("prenomELeve").Value;
     
        		unEleve = new ClEleve(numELeve, nomELeve, prenomELeve, uneClasse);
        		AjouteEleve(unEleve);
     
        		// on cré les notes
        		XPathNodeIterator RecNote = nav.Select("classe/lesEleves/unEleve/uneNote");
        		while (RecNote.MoveNext())
        		{
            		string numNote = RecNote.Current.SelectSingleNode("numNote").Value;
            		string valeurNote = RecNote.Current.SelectSingleNode("valeurNote").Value;
            		string dateNote = RecNote.Current.SelectSingleNode("dateNote").Value;
            		string coeffNote = RecNote.Current.SelectSingleNode("coeffNote").Value;
            		string numMatiereNote = RecNote.Current.SelectSingleNode("numMatiereNote").Value;
     
            		laMatiereNote = unEleve.ChercheMatiereNote(numMatiereNote);
            		uneNote = new ClNote(numNote, float.Parse(valeurNote), dateNote, float.Parse(coeffNote), laMatiereNote);
            		unEleve.AjouteNote(uneNote);
        		}
     
        		// on cré les notes
        		XPathNodeIterator RecAppr = nav.Select("classe/lesEleves/unEleve/uneAppreciation");
        		while (RecAppr.MoveNext())
        		{
            		string numAppreciation = RecAppr.Current.SelectSingleNode("numAppreciation").Value;
            		string libAppreciation = RecAppr.Current.SelectSingleNode("libAppreciation").Value;
            		string numMatiereAppr = RecAppr.Current.SelectSingleNode("numMatiereAppr").Value;
     
            		laMatiereAppr = unEleve.ChercheMatiereAppr(numMatiereAppr);
            		uneAppreciation = new ClAppreciation(numAppreciation, libAppreciation, laMatiereAppr);
            		unEleve.AjouteAppreciation(uneAppreciation);
        		}
    	}
    }
    qu'en pensez-vous ?

    Ce que je veux savoir, c'est juste si j'ai correctement récupéré les infos entre les balises, avec le respect des nœuds et tout ...
    merci

    EDIT :
    j'ai trouvé un bug !
    à la ligne ou il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unEleve = new ClEleve(numELeve, nomELeve, prenomELeve, uneClasse);
    en résultat j'ai "Erreur 1 Utilisation d'une variable locale non assignée 'uneClasse' H:\PTI\carnet de notes\ClassBulletin\ClassBulletin\ClClasseEleve.cs 276 72 ClassBulletin
    "

    cette ligne de code doit utiliser l'objet uneClasse définit plus haut.
    seulement l'instanciation se fait dans un while alors que je veux qu'il ne se fasse qu'une seule fois, car je ne gère qu'une seule classe d'élèves dans mon projet :s

    comment pourrais-je améliorer cette partie du code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // on cré la classe
    	XPathNodeIterator RecClasse = nav.Select("classe");
    	while (RecClasse.MoveNext())
    	{
        		string numClasse = RecClasse.Current.SelectSingleNode("numClasse").Value;
        		string libClasse = RecClasse.Current.SelectSingleNode("libClasse").Value;
     
        		uneClasse = new ClClasseEleve(numClasse, libClasse);
    	}

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    j'ai améliroré mon script, et réparant de grosses erreures.
    voici le nouveau code de chargement xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    public void chargement_XML()
    {
    	ClClasseEleve uneClasse;
    	ClEleve unEleve;
    	ClNote uneNote;
    	ClAppreciation uneAppreciation;
    	ClMatiere laMatiereNote;
    	ClMatiere laMatiereAppr;
     
    	XPathDocument doc = new XPathDocument("H:\\PTI\\carnet de notes\\BulletinScolaire\\saveXML.xml");
    	XPathNavigator nav = doc.CreateNavigator();
     
    	// on cré la classe
    	XPathNodeIterator RecClasse = nav.Select("classe");
    	string numClasse = RecClasse.Current.SelectSingleNode("numClasse").Value;
    	string libClasse = RecClasse.Current.SelectSingleNode("libClasse").Value;
    	uneClasse = new ClClasseEleve(numClasse, libClasse);
     
    	// on cré les élèves
    	XPathNodeIterator RecEleve = nav.Select("classe/lesEleves/unEleve");
    	// Pour chaque matiere
    	while (RecEleve.MoveNext())
    	{
        		string numELeve = RecEleve.Current.SelectSingleNode("numELeve").Value;
        		string nomELeve = RecEleve.Current.SelectSingleNode("nomELeve").Value;
        		string prenomELeve = RecEleve.Current.SelectSingleNode("prenomELeve").Value;
     
        		unEleve = new ClEleve(numELeve, nomELeve, prenomELeve, uneClasse);
        		AjouteEleve(unEleve);
     
        		// on cré les notes
        		XPathNodeIterator RecNote = nav.Select("classe/lesEleves/unEleve/uneNote");// on cré la classe
        		while (RecNote.MoveNext())
        		{
            		string numNote = RecNote.Current.SelectSingleNode("numNote").Value;
            		string valeurNote = RecNote.Current.SelectSingleNode("valeurNote").Value;
            		string dateNote = RecNote.Current.SelectSingleNode("dateNote").Value;
            		string coeffNote = RecNote.Current.SelectSingleNode("coeffNote").Value;
            		string numMatiereNote = RecNote.Current.SelectSingleNode("numMatiereNote").Value;
     
            		laMatiereNote = unEleve.ChercheMatiereNote(numMatiereNote);
            		uneNote = new ClNote(numNote, float.Parse(valeurNote), dateNote, float.Parse(coeffNote), laMatiereNote);
            		unEleve.AjouteNote(uneNote);
        		}
     
        		// on cré les notes
        		XPathNodeIterator RecAppr = nav.Select("classe/lesEleves/unEleve/uneAppreciation");
        		while (RecAppr.MoveNext())
        		{
            		string numAppreciation = RecAppr.Current.SelectSingleNode("numAppreciation").Value;
            		string libAppreciation = RecAppr.Current.SelectSingleNode("libAppreciation").Value;
            		string numMatiereAppr = RecAppr.Current.SelectSingleNode("numMatiereAppr").Value;
     
            		laMatiereAppr = unEleve.ChercheMatiereAppr(numMatiereAppr);
            		uneAppreciation = new ClAppreciation(numAppreciation, libAppreciation, laMatiereAppr);
            		unEleve.AjouteAppreciation(uneAppreciation);
        		}
    	}
    }

  6. #6
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Ca me parait pas mal du tout pour un début.

    Pour Sauvegarde_XML() utilise un XmlWriter plutôt qu'un StreamWriter. XmlWriter possède des méthodes spécialisées pour ouvrir ou fermer des éléments ou des attributs.

    Pour la restitution de ton Xml jette un oeil à la Serialization/Deserialization. Cela permet de créer une collection d'objets métier correspondants à ton xml en deux lignes de code.

    Il serait préférable (bonne pratique) que tu assignes une valeur à tes types. Au moins leur donner une valeur "null":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClMatiere uneMatiere = null;
    Sinon, cela peut provoquer des erreurs.

    Il y a aussi des erreurs dans ton fichier xml d'origine sur la casse des noms des noeuds.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  7. #7
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Il y a un outil intégré à visual studio (il faut l'ajouter) qui permet de générer des classes à partir d'un fichier Xml. Voici ce qu'il donne dans ton cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    //------------------------------------------------------------------------------
    // <auto-generated>
    //     Ce code a été généré par un outil.
    //     Version du runtime :2.0.50727.3074
    //
    //     Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
    //     le code est régénéré.
    // </auto-generated>
    //------------------------------------------------------------------------------
     
    using System.Xml.Serialization;
     
    // 
    // This source code was auto-generated by xsd, Version=2.0.50727.42.
    // 
     
     
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
    public partial class classes {
     
        private classesClasse[] itemsField;
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("classe", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public classesClasse[] Items {
            get {
                return this.itemsField;
            }
            set {
                this.itemsField = value;
            }
        }
    }
     
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    public partial class classesClasse {
     
        private string numClasseField;
     
        private string libClasseField;
     
        private classesClasseLesMatieresUneMatiere[][] lesMatieresField;
     
        private classesClasseLesElevesUnEleve[][] lesElevesField;
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string numClasse {
            get {
                return this.numClasseField;
            }
            set {
                this.numClasseField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string libClasse {
            get {
                return this.libClasseField;
            }
            set {
                this.libClasseField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        [System.Xml.Serialization.XmlArrayItemAttribute("uneMatiere", typeof(classesClasseLesMatieresUneMatiere), Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
        public classesClasseLesMatieresUneMatiere[][] lesMatieres {
            get {
                return this.lesMatieresField;
            }
            set {
                this.lesMatieresField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        [System.Xml.Serialization.XmlArrayItemAttribute("unEleve", typeof(classesClasseLesElevesUnEleve), Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
        public classesClasseLesElevesUnEleve[][] lesEleves {
            get {
                return this.lesElevesField;
            }
            set {
                this.lesElevesField = value;
            }
        }
    }
     
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    public partial class classesClasseLesMatieresUneMatiere {
     
        private string numMatiereField;
     
        private string libMatiereField;
     
        private string coeffMatiereField;
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string numMatiere {
            get {
                return this.numMatiereField;
            }
            set {
                this.numMatiereField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string libMatiere {
            get {
                return this.libMatiereField;
            }
            set {
                this.libMatiereField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string coeffMatiere {
            get {
                return this.coeffMatiereField;
            }
            set {
                this.coeffMatiereField = value;
            }
        }
    }
     
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    public partial class classesClasseLesElevesUnEleve {
     
        private string numEleveField;
     
        private string nomEleveField;
     
        private string prenomELeveField;
     
        private classesClasseLesElevesUnEleveUneNote[] uneNoteField;
     
        private classesClasseLesElevesUnEleveUneAppreciation[] uneAppreciationField;
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string numEleve {
            get {
                return this.numEleveField;
            }
            set {
                this.numEleveField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string nomEleve {
            get {
                return this.nomEleveField;
            }
            set {
                this.nomEleveField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string prenomELeve {
            get {
                return this.prenomELeveField;
            }
            set {
                this.prenomELeveField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("uneNote", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public classesClasseLesElevesUnEleveUneNote[] uneNote {
            get {
                return this.uneNoteField;
            }
            set {
                this.uneNoteField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("uneAppreciation", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public classesClasseLesElevesUnEleveUneAppreciation[] uneAppreciation {
            get {
                return this.uneAppreciationField;
            }
            set {
                this.uneAppreciationField = value;
            }
        }
    }
     
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    public partial class classesClasseLesElevesUnEleveUneNote {
     
        private string numNoteField;
     
        private string valeurNoteField;
     
        private string dateNoteField;
     
        private string coeffNoteField;
     
        private string numMatiereNoteField;
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string numNote {
            get {
                return this.numNoteField;
            }
            set {
                this.numNoteField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string valeurNote {
            get {
                return this.valeurNoteField;
            }
            set {
                this.valeurNoteField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string dateNote {
            get {
                return this.dateNoteField;
            }
            set {
                this.dateNoteField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string coeffNote {
            get {
                return this.coeffNoteField;
            }
            set {
                this.coeffNoteField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string numMatiereNote {
            get {
                return this.numMatiereNoteField;
            }
            set {
                this.numMatiereNoteField = value;
            }
        }
    }
     
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    public partial class classesClasseLesElevesUnEleveUneAppreciation {
     
        private string numAppreciationField;
     
        private string libAppreciationField;
     
        private string numMatiereApprField;
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string numAppreciation {
            get {
                return this.numAppreciationField;
            }
            set {
                this.numAppreciationField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string libAppreciation {
            get {
                return this.libAppreciationField;
            }
            set {
                this.libAppreciationField = value;
            }
        }
     
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string numMatiereAppr {
            get {
                return this.numMatiereApprField;
            }
            set {
                this.numMatiereApprField = value;
            }
        }
    }
    Grace à ce jeu de classes. Tu peux facilement serializer/deserializer.

    En pièce jointe, le schéma obtenu.

    A+
    Images attachées Images attachées  
    "Winter is coming" (ma nouvelle page d'accueil)

  8. #8
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci Immobilis pour tes réponses,
    malheureusement, c'est un peu trop compliqué pour moi, et s'agissant d'un projet informatique pour mes etudes, je dois faire plus simple.
    mais je garde ton code pour m'en inspirer pour des travaux futurs ^^

    j'ai appliqué ton conseil pour ces lignes de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ClEleve unEleve = null;
                ClNote uneNote = null;
                ClAppreciation uneAppreciation = null;
                ClMatiere laMatiereNote;
                ClMatiere laMatiereAppr;
    j'espère que j'éviterais ainsi les bugs potentiels

    j'ai malheureusement un nouveau bug qui vient d'apparaitre, et il es vraiment louche.
    bon, je vais dans mon application et j'essaie de charger le xml que j'ai rempli en dur pour le test.
    et là c'est étrange !

    voici la réponse d'erreur que j'obtiens lorsque je lance mon appli :

    Il existe un caractère non valide dans le codage donné. Ligne 8, position 20.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XPathDocument doc = new XPathDocument("H:\\PTI\\carnet de notes\\BulletinScolaire\\BulletinScolaire\\save.xml");
    je pense que c# a bien trouvé le fichier.
    si je remplace cette instruction par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XPathDocument doc = new XPathDocument("save.xml");
    voila la reponse :
    Impossible de trouver le fichier 'H:\PTI\carnet de notes\BulletinScolaire\BulletinScolaire\bin\Debug\save.xml'.

    si j'ecris le chemin signalé dans l'intruction, il me ressors l'erreur de départ ...

    pourquoi il délire ? Oo

  9. #9
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Il y a aussi des erreurs dans ton fichier xml d'origine sur la casse des noms des noeuds.
    ExempleIl faut que les balises de début et de fin d'un élément soient les mêmes.
    Impossible de trouver le fichier 'H:\PTI\carnet de notes\BulletinScolaire\BulletinScolaire\bin\Debug\save.xml'
    Normal, il faut indiquer le chemin complet dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XmlDocument xml = new XmlDocument();
    xml.Load("Chemin complet");
    Sinon il prend le repertoire d'execution.
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  10. #10
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    j'ai réparé ce genre de faute, donc c'est ok.
    XmlDocument() n'est pas proposé par c# >_<
    je n'ai que XPathDocument()

    mais lorsque j'ecris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XPathDocument doc = new XPathDocument("H:\\PTI\\carnet de notes\\BulletinScolaire\\BulletinScolaire\\save.xml");
    rien ne fonctionne, j'ai la réponse :
    Il existe un caractère non valide dans le codage donné. Ligne 8, position 20.

    le test que j'ai fait etait juste destiné a savoir s'il trouvait le fichier, je pense qu'il l'a trouvé...
    mais je ne sais pas ce qui se passe réellement :s

    quelqu'un aurait une suggestion ?

  11. #11
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par thor76160 Voir le message
    Il existe un caractère non valide dans le codage donné. Ligne 8, position 20.
    Qu'est-ce qu'il y a Ligne 8, position 20 de ton fichier xml?

    XmlDocument est disponible dans le namespace: System.Xml. Mais XmlPathDocument devrait faire l'affaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
    xml.Load("Chemin vers le fichier");
    Tu as un exemple de serialization/deserialization ici: http://www.developpez.net/forums/m4185461-15/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    XmlSerializer serializer = new XmlSerializer(typeof(HelloWorld));
    MemoryStream mems = new System.IO.MemoryStream();
    serializer.Serialize(mems, hello);
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  12. #12
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    j'ai trouvé l'erreur à la ligne 8 position 20 ...
    un "ç" >_<
    c'est la meilleur, je ne peut pas utuliser les caractères spéciaux, lol

    bon, merci pour le coup de main, je finirais le débugage plus tard

  13. #13
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Il est probable qu'il faut mettre ce genre de caractères dans des crochets "data".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <libAppreciation>
        <![CDATA[placer ici tous les caractères que tu souhaites]]>
    </libAppreciation>
    Sinon, il faudrait préciser l'encodage des caractères au moment de la génération de ton fichier Xml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    StreamWriter sw = new StreamWriter("H:\\PTI\\carnet de notes\\BulletinScolaire\\saveXML.xml");
    sw.Encoding = Encoding.UTF8;
    Sinon, XmlPathDocument attend une "uri" plutôt qu'un chemin dans un systeme de fichier. Parmis les constructeurs de XmlPathDocument tu peux passer un flux (Stream).

    En ce qui concerne le schéma, on se rend compte que les matières sont liées à la classe non à l'élève. Tous les élèves du coup on les mêmes matières. Des élèves ne peuvent pas faire des matières différentes (anglais, espagnol...)? Ce schéma montre chacune des classes sous le forme d'un petit tableau.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  14. #14
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    Pour les matières, il s'agit d'un gestionnaire d'une classe simplifié.
    j'ai choisi (donc c'est un choix personnel) d'attribuer les mêmes matières pour tout le monde ^^

    en ce qui concerne l'encode, je n'y arrive pas mais je verrais ça apres, merci pour l'infos, je chercherais davantage.

    EDIT :

    j'ai trouvé un bug qui me cause un soucis assez épineux !

    voici un extrait de mon code dans mon winform :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void Accueil_Load(object sender, EventArgs e)
    {
                uneClasse = new ClClasseEleve("1","2SIN");
                uneClasse.chargement_XML(uneClasse);
    }
    étant donné que je dois utiliser l'objet une classe dans ma fonction de chargement xml, j'ai passé l'objet en paramètre.

    voici un extrait de mon code de chargement xml :
    c'est l'instant ou je cré un élève, et c'est le seul instant où j'ai besoin de l'objet uneClasse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void chargement_XML(ClClasseEleve uneClasse)
    {
            ...
            unEleve = new ClEleve(numELeve, nomELeve, prenomELeve, uneClasse);
            AjouteEleve(unEleve);
            ...
    }
    le probleme c'est que l'objet semble vide Oo

    comment puis-je réparer ça ??
    le script bloque completement au niveau de l'inscription des élèves >_<

    pouvez-vous m'aider sur ce coup là également svp ?

  15. #15
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par thor76160 Voir le message
    le probleme c'est que l'objet semble vide Oo
    Que donne un point d'arrêt en mode débug sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unEleve = new ClEleve(numELeve, nomELeve, prenomELeve, uneClasse);
    De plus, il faut vérifer (toujours en débug) que numELeve, nomELeve, prenomELeve, uneClasse ont bien une valeur.
    "Winter is coming" (ma nouvelle page d'accueil)

  16. #16
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Pour résumer. Voici une autre version de tes classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace ClassLibrary1.School
    {
        [Serializable]
        public class Ecole
        {
            private string _nom;
     
            public string Nom
            {
                get { return _nom; }
                set { _nom = value; }
            }
     
            private List<Classe> _classes = new List<Classe>();
     
            public List<Classe> Classes
            {
                get { return _classes; }
                set { _classes = value; }
            }
        }
     
        [Serializable]
        public class Classe
        {
            private string _nom;
     
            public string Nom
            {
                get { return _nom; }
                set { _nom = value; }
            }
     
            private List<Eleve> _eleves = new List<Eleve>();
     
            public List<Eleve> Eleves
            {
                get { return _eleves; }
                set { _eleves = value; }
            }
     
            private List<Matiere> _matieres = new List<Matiere>();
     
            public List<Matiere> Matieres
            {
                get { return _matieres; }
                set { _matieres = value; }
            }
        }
     
        [Serializable]
        public class Eleve
        {
            private string _nom;
     
            public string Nom
            {
                get { return _nom; }
                set { _nom = value; }
            }
        }
     
        [Serializable]
        public class Matiere
        {
            private string _nom;
     
            public string Nom
            {
                get { return _nom; }
                set { _nom = value; }
            }
        }
     
        public enum NomMatiere
        {
            Mathematiques,
            Francais
        }
    }
    Tu peux constater que j'ai ajouté l'attribu: Serializable.
    Maintenant, je fais le programme suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    static void Main(string[] args)
    {
        // Je créé une école
        Ecole ecole = new Ecole();
        ecole.Nom = "Saint Exupéry";
        // Je créé une classe
        Classe classe = new Classe();
        classe.Nom = "CM1B";
        ecole.Classes.Add(classe);
        // Je créé un élève
        Eleve toto = new Eleve();
        toto.Nom = "Toto";
        classe.Eleves.Add(toto);
        // Je créé un autre élève
        Eleve titi = new Eleve();
        titi.Nom = "Titi";
        classe.Eleves.Add(titi);
        // Je créé une matière
        Matiere francais = new Matiere();
        francais.Nom = NomMatiere.Francais.ToString();
        // J'ajoute la matière à la classe
        classe.Matieres.Add(francais);
        // Je créé une autre matière
        Matiere math = new Matiere();
        math.Nom = NomMatiere.Mathematiques.ToString();
        // J'ajoute la matière à la classe
        classe.Matieres.Add(math);
     
        XmlSerializer serializer = new XmlSerializer(typeof(Ecole));
        MemoryStream mems = new System.IO.MemoryStream();
        serializer.Serialize(mems, ecole);
     
        string _str = Encoding.UTF8.GetString(mems.ToArray());
     
        using (FileStream stream = File.Create(@"C:\temp\ecole.xml"))
        {
            Byte[] data = System.Text.Encoding.UTF8.GetBytes(_str);
            stream.Write(data, 0, data.Length);
        }
    }
    La serialization de ma classe "Ecole" me permet de générer directement le fichier Xml ci dessous:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?xml version="1.0"?>
    <Ecole xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Nom>Saint Exupéry</Nom>
      <Classes>
        <Classe>
          <Nom>CM1B</Nom>
          <Eleves>
            <Eleve>
              <Nom>Toto</Nom>
            </Eleve>
            <Eleve>
              <Nom>Titi</Nom>
            </Eleve>
          </Eleves>
          <Matieres>
            <Matiere>
              <Nom>Francais</Nom>
            </Matiere>
            <Matiere>
              <Nom>Mathematiques</Nom>
            </Matiere>
          </Matieres>
        </Classe>
      </Classes>
    </Ecole>
    La deserialization permet de faire l'inverse. A partir du Xml générer une instance de la classe Ecole.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Ecole ecole2 = null;
    XmlReader xr = XmlTextReader.Create(@"C:\temp\ecole.xml");
    if (serializer.CanDeserialize(xr))
        ecole2 = (Ecole)serializer.Deserialize(xr);
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  17. #17
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    ce n'est pas exactement ça que j'aimerais faire

    voici ma classe Eleve :

    privé :
    numEleve : chaine
    nomEleve : chaine
    prenomEleve : chaine
    lesNotes : collection de Note
    lesAppreciations : collection de Appreciation
    LaClasse : objet de type ClasseEleve


    le probleme est que je n'arrive pas à assigner l'objet instancier uneclasse à l'objet laclasse.

    pour résumer :

    extrait de la winform :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void Accueil_Load(object sender, EventArgs e)
    {
                uneClasse = new ClClasseEleve("1", "2SIN");
                uneClasse.chargement_XML(uneClasse);
    }
    extrait de mon script de chargement xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void chargement_XML(ClClasseEleve uneClasse)
    {
                string numEleve = RecEleve.Current.SelectSingleNode("numEleve").Value;
                string nomEleve = RecEleve.Current.SelectSingleNode("nomEleve").Value;
                string prenomEleve = RecEleve.Current.SelectSingleNode("prenomEleve").Value;
     
                // ca coince ici ! l'objet uneClasse est vide u_u
                unEleve = new ClEleve(numEleve, nomEleve, prenomEleve, uneClasse);
    }
    Malheureusement, au niveau du script XML, uneClasse est vide !
    il n'y a aucun message d'erreur, mais je suis sur que le probleme est là !
    tous les autres parametres sont corrects.

    procédure d'instancieation d'un objet de type Eleve :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ClEleve(string unNumEleve, string unNomEleve, string unPrenomEleve, ClClasseEleve LaClasse)
    {
                NumEleve = unNumEleve;
                NomEleve = unNomEleve;
                PrenomEleve = unPrenomEleve;
                this.LaClasse = LaClasse;
                LesNotes = new ArrayList();
                LesAppreciations = new ArrayList();
    }

  18. #18
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    bon OK j'ai rien dit, ca marche u_u
    mais alors là, je ne vois plus le probleme O_o

  19. #19
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Au final t'as fait quoi?
    "Winter is coming" (ma nouvelle page d'accueil)

  20. #20
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    ben en fait l'objet passait bien dans la fonction, c'est juste ma fonction AjoutMatiereNote() qui intervient en plein milieu du code qui était mal fichue >_<
    je plaide coupable ^^

    merci pour votre aide , je pense que tout a été géré, mais je vais quand même attendre demain avant de déclaré le sujet comme étant résolu, au cas où

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Python 3.X] Import dans des modules? Comment faire et quelles sont les bonnes pratiques?
    Par Davjack dans le forum Général Python
    Réponses: 2
    Dernier message: 03/07/2014, 12h13
  2. Réponses: 5
    Dernier message: 25/05/2009, 14h59
  3. Réponses: 7
    Dernier message: 23/03/2009, 22h38
  4. Quelles sont les bonnes pratiques avec Zend Framework ?
    Par Community Management dans le forum Zend Framework
    Réponses: 14
    Dernier message: 02/02/2009, 20h35
  5. [C#/ASP.Net/DAL] Quelles sont les bonnes pratiques ?
    Par fouhaa dans le forum Accès aux données
    Réponses: 4
    Dernier message: 13/07/2006, 23h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo