Trier xml selon l'attribut en c#

halimalili Messages postés 13 Date d'inscription samedi 29 janvier 2011 Statut Membre Dernière intervention 22 janvier 2013 - 12 mars 2011 à 23:51
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 17 mai 2011 à 10:11
SVP!! je veux le code
c# qui me permet de trier mon fichier xml selon le name du protocol, lorsque je clique sur boutton trier_xml!!!!!!!
Voici ma structure xml:

 
    <format>
      <fields>
      </fields>
    </format>
     

 

    <format>
      <fields>
      </fields>
    </format>
     


 
    <format>
      <fields>
      </fields>
    </format>
     



svp!! c un peu urgent ... :((((

7 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
13 mars 2011 à 10:38
toujours sur ce problème ?

C'est en 3 étapes :
- tu load ton XML source,
- tu tries ta XMLNodeList,
- tu save ton XML retouché.

La seule difficulté réside dans l'étape de tri, deux possibilités :
- tu implémentes une fonction de tri (regarde alors sur wiki tu dois y trouver les algo),
- tu bind tes XMLNodes dans un Array, et tu joues avec la fonction Sort() et les IComparer.

Bon courrage
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
14 mars 2011 à 09:53
Bonjour,

Merci de:
1) lire le règlement: articles 1, 2, 4 et 9.
2) ne pas poster deux fois la même question: Trier un fichier xml en c#...

La vie serait tellement simple si on trouvait des personnes pour faire son boulot à sa place pourtant...
Mais ce n'est pas ces dernières qui récoltent le fruit de ton travail (exams, salaire, etc) mais bien toi. C'est pour cela que ce travail t'a été demandé et non à nous.

Tu comprendras donc que tu ne peux t'en remettre qu'à toi même pour réussir cette épreuve.

Allez courage !

Billou_13

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
halimalili Messages postés 13 Date d'inscription samedi 29 janvier 2011 Statut Membre Dernière intervention 22 janvier 2013
15 mars 2011 à 09:25
Et oui, merci bien de ton complément,
sayer j'ai trouve moi même la solution , et ca marche.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
15 mars 2011 à 12:16
Bonjour

Tout d'abord, billou a à 100% raison.
Ensuite, si tu as trouvé la solution, ça pourrait être sympa de la partager sur le forum, au cas où une autre personne aurait le même problème que toi (c'est un peu le principe de ce site, et c'est pour ça que le premier point du règlement a de l'intérêt).

Enfin, avec LINQ2XML, ça se fait en quelques lignes (en revanche, ton fichier XML doit impérativement être valide) :

// On charge le document
XDocument doc = XDocument.Load("monFichier.xml");
// On récupère la liste des éléments triés par attribut
var listeTriee = from elt in doc.Descendants("protocol") orderby elt.Attribute("name").Value select elt;
// On prépare un nouveau document avec la balise racine
XDocument nouvDoc = new XDocument();
XElement racine = new XElement("nomRacine");
nouvDoc.Add(racine);
// On ajoute chaque élément au nouveau document et on enregistre
foreach (XElement elt in listeTriee) racine.Add(elt);
nouvDoc.Save("nomFichier.xml");


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0

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

Posez votre question
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
15 mars 2011 à 14:04
Tu peux même faire ça en une seule et unique ligne :
new XDocument(new XElement("nomRacine", XDocument.Load("monFichier.xml").Descendants("protocol").OrderBy(elt => elt.Attribute("name").Value))).Save("monFichier.xml");

Si je traduits :
Tu crées un nouveau XDocument, contenant un noeud appelé "nomRacine", contenant une liste de noeuds issue de la liste des noeuds appelés "protocol" dans ton fichier "monFichier.xml", que tu tries par valeur de l'attribut "name". Enfin, tu sauvegardes le XDocument sous "monFichier.xml".

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
italiano1360 Messages postés 2 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 16 mai 2011
16 mai 2011 à 18:44
et comment n'afficher que les 10 derniers enregistrements du fichier XML par exemple ??? de ne faire contenir que 10 donnée au fichiers XML ?...
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
17 mai 2011 à 10:11
Si tu reprends mon premier exemple, il te suffit de modifier le foreach à la fin :

for (int i = 0; i < 10 && i < listeTriee.Count; i++) racine.Add(listeTriee[i]);


Ainsi, il prendra au maximum les 10 premiers de la liste (ou il les prendra tous s'il y en a moins de 10).

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
Rejoignez-nous