Comparer 2 listes

cs_mathew77 Messages postés 46 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 août 2009 - 22 juil. 2009 à 16:08
cs_mathew77 Messages postés 46 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 août 2009 - 24 juil. 2009 à 11:55
Bonjour,voilà,je souhaiterais comparé 2 fichiers XML.Pour cela,je voudrais mettre tous les éléments compris entre une balise XML,dans une liste,et faire de même pour l'autre fichier XML.Au final j'aurais donc 2 listes,et ensuite je voudrais que ça compare les 2 listes,et que ça m'affiche dans chaque liste les éléments qui ne sont pas dans l'autre liste.

Alors j'aurais besoin d'aide pour mettre mes éléments entre 2 balise XML dans une liste déja et ensuite pour comparer les 2 listes.

Merci de m'aider.

9 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
22 juil. 2009 à 16:26
Salut

Tu peux faire quelques recherches sur la lecture d'un fichier XML en C# (XmlDocument par exemple). Tu trouveras tout le nécessaire sur ce site ou sur google.

Une fois que tu as tes deux List<string>, tu peux utiliser la méthode "Contains()" par exemple :
bool ok = true;
foreach (string s in maListe1) if (!maListe2.Contains(s)) ok = false;
foreach (string s in maListe2) if (!maListe1.Contains(s)) ok = false;
return ok; // true si les deux listes possèdent les mêmes éléments


Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
cs_mathew77 Messages postés 46 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 août 2009
22 juil. 2009 à 16:31
Merci pour ta réponse rapide,je sais déjà comment lire mon fichier XML,voici mon code qui fonctionne
XPathDocument doc = new XPathDocument(filename);
            XPathDocument doc1 = new XPathDocument(filename1);
            XPathNavigator nav = doc.CreateNavigator();
            XPathNavigator nav1 = doc1.CreateNavigator();

            XPathExpression expr2;
            XPathExpression expr3;
            XPathExpression expr4;
            XPathExpression expr5;
            expr2 = nav.Compile("/root.30/elements.9/elements/ElementExtractorMono.3/name");
            expr3 = nav1.Compile("/root.30/elements.9/elements/ElementExtractorMono.3/name");
            expr4 = nav.Compile("/root.30/elements.9/elements/ElementExtractorMulti.4/name");
            expr5 = nav1.Compile("/root.30/elements.9/elements/ElementExtractorMulti.4/name");

            
            XPathNodeIterator ite2 = nav.Select(expr2);
            XPathNodeIterator ite3 = nav1.Select(expr3);
            XPathNodeIterator ite4 = nav.Select(expr4);
            XPathNodeIterator ite5 = nav1.Select(expr5);


Ensuite dans ma boucle :
  ite2.MoveNext();
                    ite3.MoveNext();
                    XPathNavigator nav2 = (XPathNavigator)ite2.Current.Clone();
                    XPathNavigator nav3 = (XPathNavigator)ite3.Current.Clone();


Mais maintenant je voudrais ajouter ces éléments à une liste et je ne sais pas comment faire
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
22 juil. 2009 à 16:38
J'avoue ne pas être un gros utilisateur d'XML, donc je ne garantis rien quant au résultat, mais un truc du genre devrait marcher :
List<string> liste = new List<string>();

while(ite2.MoveNext()) // Changer par un do while s'il manque le 1er élément
{
    liste.Add(ite2.Current.Value);
}


Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
cs_mathew77 Messages postés 46 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 août 2009
22 juil. 2009 à 17:13
Merci beaucoup,je vais tester cela,maintenant il faut que j'arrive à comparer ces 2 listes,j'ai vu des tuto bien fait.
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
22 juil. 2009 à 17:20
Euh... le code dans mon premier post sert justement à comparer 2 listes...

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
cs_mathew77 Messages postés 46 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 août 2009
23 juil. 2009 à 11:52
Ah d'accord,je vais essayé,merci pour ton aide précieuse en tout cas :)
0
cs_mathew77 Messages postés 46 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 août 2009
23 juil. 2009 à 12:28
Je pense ne pas être très loin du résultat,mais j'ai un probléme,je veux seulement qu'il mette dans ma liste,des les éléments entre les balises <name> de mon XML,or il me prends tout ce qui est entre les balises j'ai l'impression,voici mon code :
private void Extractor_Click(object sender, EventArgs e)
        {
            textBox2.Clear();
            textBox6.Clear();
            destination = listview.SelectedItems[0].Text;
            String myPath2 = parentDirectory + "\" + destination;//On concave 2 chaines
            string Folder = listepat.SelectedItem.ToString(); 
            String myPath3 = myPath2 + "\" + Folder;
            destination1 = listView1.SelectedItems[0].Text;
            string myPath4 = parentDirectory1 + "\" + destination1;
            string Folder1 = listepat2.SelectedItem.ToString();
            string myPath5 = myPath4 + "\" + Folder1;
            string filename = myPath3;
            string filename1 = myPath5;
            XPathDocument doc = new XPathDocument(filename);
            XPathDocument doc1 = new XPathDocument(filename1);
            XPathNavigator nav = doc.CreateNavigator();
            XPathNavigator nav1 = doc1.CreateNavigator();
            XPathExpression expr2;
            XPathExpression expr3;
            expr2 = nav.Compile("/root.30/elements.9/elements/ElementExtractorMono.3/name");
            expr3 = nav1.Compile("/root.30/elements.9/elements/ElementExtractorMono.3/name");
            XPathNodeIterator ite2 = nav.Select(expr2);
            XPathNodeIterator ite3 = nav1.Select(expr3);
            List<string> liste1 = new List<string>();
            List<string> liste2 = new List<string>();
            int i 0,k 0;
            try
            {
                while (i < ite2.Count)
                {
                    i++;
                    liste1.Add(ite2.Current.Value);
                    ite2.MoveNext();
                }
                while (k < ite3.Count)
                {
                    k++;
                    liste2.Add(ite3.Current.Value);
                    ite3.MoveNext();
                }
                foreach (string s in liste1)
                {
                    if (!liste2.Contains(s))
                    {
                        textBox2.Text = textBox2.Text + s.ToString();
                    }
                } 
                foreach (string r in liste2)
                {
                    if (!liste1.Contains(r))
                    {
                        textBox6.Text = textBox6.Text + r.ToString();
                    }
                }
            }


Je ne comprends pas... :(
0
cs_mathew77 Messages postés 46 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 août 2009
23 juil. 2009 à 16:34
J'ai modifié mon code,mais je n'ai que le 1 résultat dans ma liste,le compteur se bloque à 1.

Voici mon nouveau code :
textBox2.Clear();
            textBox6.Clear();
            destination = listview.SelectedItems[0].Text;
            String myPath2 = parentDirectory + "\" + destination;//On concave 2 chaines
            string Folder = listepat.SelectedItem.ToString(); 
            String myPath3 = myPath2 + "\" + Folder;
            destination1 = listView1.SelectedItems[0].Text;
            string myPath4 = parentDirectory1 + "\" + destination1;
            string Folder1 = listepat2.SelectedItem.ToString();
            string myPath5 = myPath4 + "\" + Folder1;
            string filename = myPath3;
            string filename1 = myPath5;
            XPathDocument doc = new XPathDocument(filename);
            XPathDocument doc1 = new XPathDocument(filename1);
            XPathNavigator nav = doc.CreateNavigator();
            XPathNavigator nav1 = doc1.CreateNavigator();
            XPathExpression expr2;
            XPathExpression expr3;
            expr2 = nav.Compile("/root.30/elements.9/elements/ElementExtractorMono.3/name");
            expr3 = nav1.Compile("/root.30/elements.9/elements/ElementExtractorMono.3/name");
            XPathNodeIterator ite2 = nav.Select(expr2);
            XPathNodeIterator ite3 = nav1.Select(expr3);
            ite2.MoveNext();
            ite3.MoveNext();
            XPathNavigator nodesnav = ite2.Current;
            XPathNavigator nodesnav1 = ite3.Current;
            XPathNodeIterator nodestext = nodesnav.SelectDescendants(XPathNodeType.Text, true);
            XPathNodeIterator nodestext1 = nodesnav1.SelectDescendants(XPathNodeType.Text, true);
            List<string> liste1 = new List<string>();
            List<string> liste2 = new List<string>();
            int i 0, j 0;
            try
            {
                while (i < nodestext.Count)
                {
                    liste1.Add(nodestext.Current.Value);
                    i++;
                }
                while (j < nodestext1.Count)
                {
                    liste2.Add(nodestext1.Current.Value);
                    j++;
                }
                foreach (string s in liste1)
                {
                    if (!liste2.Contains(s))
                    {
                        textBox2.Text = textBox2.Text + "\r\n " + s.ToString();
                    }
                } 
                foreach (string r in liste2)
                {
                    if (!liste1.Contains(r))
                    {
                        textBox6.Text = textBox6.Text + "\r\n " + r.ToString();
                    }
                }
            }
0
cs_mathew77 Messages postés 46 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 août 2009
24 juil. 2009 à 11:55
Bon j'ai réussi finalement,c'était au niveau de ma navigation dans le XML.
0
Rejoignez-nous