Trier une collections de noeuds Xml [Résolu]

Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
- - Dernière réponse : romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
- 11 juil. 2007 à 09:12
Bonjour
voila je me demandais s'il exisait un moyen de trier des noeuds xml

- nous savons trier une liste d'objets avec IComparer ou IComparable
- nous savons trier des données provenant d'une base directement avec la requete SQL et la clause order by

mais pour une liste de noeuds xml exitse t'il un moyen de trier cette liste(de XmlElement par exemple) par rapport à un noeud

simplement mon raisonnement est simple ce que nous avons besoin en general c'est de filtrer et trier une liste/collection (+ mettre à jour bien entendu) , aussi si je me demandes cela c'est parce que avec les noeuds Xml je ne sais que filtrer par l'intermediaire d'une expression XPath mais si on savait comment trier cette collection de noeuds on pourrait envisager carrement de se passer de la couche metier intermediaire(et oui pourquoi recopier deux fois des mêmes données vues qu'elles existent deja dans le fichier Xml)

trier avec une expression Xpath ?? non je doutes que ce soit possible ?
ou bien sur en utilisant un algorithme de trie

qu'en pensez vous ? est ce que ce serait une bonne idée d'essayer de se passer de la couche metier pour attaquer directement la ou se trouvent les données ?

Se poser les bonnes questions ;) 
apporter les réponses
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
884
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
3 mars 2009
3
Merci
Salut,
Tu peux faire une classe permettant de comparer les noeuds, ici je t'en ai fais une comparant les noeuds selon un attribut choisi :

class XmlNodeComparer : Comparer<System.Xml.XmlNode>
{
    string attributeToCompare;
    public string AttributeToCompare
    {
        get { return attributeToCompare; }
        set { attributeToCompare = value; }
    }

    public XmlNodeComparer(string AttributeToCompare)
    {
        attributeToCompare = AttributeToCompare;
    }

    public override int Compare(System.Xml.XmlNode x, System.Xml.XmlNode y)
    {
        return (int.Parse(x.Attributes[attributeToCompare].Value) -
            int.Parse(y.Attributes[attributeToCompare].Value));
    }
}

Puis tu peux l'utiliser très simplement :

System.Xml.XmlNodeList xmlNodeList;
//Initialisation de xmlNodeList
List nodeList = new List(xmlNodeList.GetEnumerator());
nodeList.Sort(new XmlNodeComparer("order"));

Julien.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Julien237
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
3
Merci
Sans faire de teste et sans savoir si c'est possible de faire exactement ce que tu veux, tu peux regarder du côté de AddSort, je sais plus exactement ce que fait cette fonction  :

http://msdn2.microsoft.com/en-us/library/system.xml.xpath.xpathexpression.addsort(vs.71).aspx

<hr />
-Blog-

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
3
Merci
Tu peux jeter un oeil dans les comments de ce poste sur mon blog.

<hr />
-Blog-

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
884
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
3 mars 2009
0
Merci
Oups j'ai laissé les listes d'int, ce sont des XmlNode bien sûr...

Julien.
Commenter la réponse de Julien237
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
0
Merci
éé pas bete l'idée de créer une classe comparer avec un xmlnode
je vais voir merci :)

Se poser les bonnes questions ;) 
apporter les réponses
Commenter la réponse de romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
0
Merci
l'idée est excellente Julien237, je mets "réponse acceptée" mais si d'autres personnes ont des ides :) je evux bien :p

Se poser les bonnes questions ;) 
apporter les réponses
Commenter la réponse de romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
0
Merci
roo lol ca m'a l'air excellent Bidou merci

Se poser les bonnes questions ;) 
apporter les réponses
Commenter la réponse de romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
0
Merci
j'ai pas tout tester ni regarder mais c'est exactement ce qu'il fallait

a ba avec les variables de Coq , le tuto de Bidou et maintenant la possibilité de trier
on va devenir des pros de XPath :p

Se poser les bonnes questions ;) 
apporter les réponses
Commenter la réponse de romagny13
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
Je pense que je vais faire une suite à ce tuto, avec des parties un peu "plus avancée".
Parce que XPath c'est vraiment puissant et pratique

<hr />
-Blog-
Commenter la réponse de cs_Bidou
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
0
Merci
oui ce serait une trés bonne idée
le seul hic que je vois à l'utilisation des variables xslt et le tri c'est qu'apparemment ils sont utilisables qu'avec un XPathNavigator et par un simple XmlDocument ?

Se poser les bonnes questions ;) 
apporter les réponses
Commenter la réponse de romagny13
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
Voui, mais est ce vraiment un problème... ^^
Sinon regarder aussi du côté de la librairie Mvp.Xml, il doit y avoir des choses sympathiques sur le sujet là dedans.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
0
Merci
Oui 'ai regardé un peu plus Mvp.xml hier soir ca a l'air pas mal

sinon connaitriez vous des tools qui facilitent enormement la saisie et le test des expressions Xpath
genre on commence à saisir et une liste en auto completion est proposée contenat a la fois les elements,attributs possibles a l'emplacement courant mais proposant egalement toutes les methodes(ex : StartsWith) ?

++

Se poser les bonnes questions ;) 
apporter les réponses
Commenter la réponse de romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
0
Merci
A oui il y a XPathBuilder qui est effectivement pas mal je me souvenais pas qu'il avait l'auto completion
sinon j'ai telecharge XPathMania,Visual XPath
mais celui qui se rapproche le plus de ce que je recherche est payant
bon j'avais commencé a créer une petite tool pour Xpath dans le generateur de code linq to xml, et si j'avais le niveau suffisant je developperais un petit outil pour cela parce que cela peut se reveler tres pratqiue et terriblement efficace surtout lorsque l'on a les methodes de proposer ,exemple je saisis "[" toutes les methodes sont proposées avec en tooltip la syntaxe
mercii
++

Se poser les bonnes questions ;) 
apporter les réponses
Commenter la réponse de romagny13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.