Bonjour à tous,

j'ai encore un petit problème (rien de grave) sur une fonction qui doit lire un fichier xml, et remplacer un mot par un autre dans une propriété de node (une fois le bon node localisé)

Voici tout d'abord le code :

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
            for (int i = 0; i < lst_page.Items.Count; i++)
            {
 
                page_lst_str = page_lst_str + " " + lst_page.Items[i].Text;
 
            }
            string[] page_lst = page_lst_str.Split(' ');
 
            for (int j = 0; j < page_lst.Count(); j++)
            {
                //Find nom page, find number attribute where name = roles
                //Rajoute le nom du roles à la liste avec un espace
                //Recherche par le reader
                //Write une fois la dernière verification finie juste write en utilisant les i,j,k
                //Création du reader XML afin de parcourir le XML et vérifier les autorisations d'accès a la page
 
                XmlTextReader tr2 = null;
                try
                {
                    //Ouverture du XML dans le reader
                    tr2 = new XmlTextReader("");
                    tr2.XmlResolver = null;
                    XmlDocument doc2 = new XmlDocument();
                    doc2.Load(tr2);
 
                    //Spécifie les nodes
                    XmlNodeList list2 = doc2.GetElementsByTagName("page");
 
                    //Début de la recherche dans les nodes (pages) présents
                    foreach (XmlNode node in list2)
                    {
                        if (node.HasChildNodes)
                        {
                            for (int i = 0; i < node.ChildNodes.Count; i++)
                            {
                                for (int k = 0; k < node.ChildNodes[i].Attributes.Count; k++)
                                {
                                    for (int m = 0; m < node.ChildNodes[i].Attributes.Count; m++)
                                    {
                                        if (node.ChildNodes[i].Attributes[k].Name == "title" && node.ChildNodes[i].Attributes[m].Name == "roles")
                                        {
                                            string selected_role = lst_roles.SelectedItem.Value.ToString();
                                            selected_role.Trim();
                                            string roles_var_xml2 = node.ChildNodes[i].Attributes[m].Value.ToString();
                                            string roles_var_xml = roles_var_xml2.Replace(selected_role.ToString(), "");
 
 
                                            //roles_var_xml = roles_var_xml.Replace(selected_role, "u");
 
                                            //regler le probleme suivant : selected role ne se supprime pas de la string de role auth
 
                                            if (page_lst[j] == node.ChildNodes[i].Attributes[k].Value.ToString())
                                            {
                                                //Ecrit dans le node.ChildNodes[i].Attributes[m].Value
                                                list2.Item(0).ChildNodes[i].Attributes[m].Value = roles_var_xml + " " + temp_role;
 
                                            }
                                            else
                                            {
                                                list2.Item(0).ChildNodes[i].Attributes[m].Value = roles_var_xml.ToString();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    //Ferme le flux XML
                    tr2.Close();
                    doc2.Save("");
                }
                catch (XmlException ex)
                {
                    Response.Write("erreur");
                }
 
 
            }
Le problème se trouve ici, le string ne supprime pas les mots demandé (selected string = "bo" par exemple)


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
string selected_role = lst_roles.SelectedItem.Value.ToString();
                                            selected_role.Trim();
                                            string roles_var_xml2 = node.ChildNodes[i].Attributes[m].Value.ToString();
                                            string roles_var_xml = roles_var_xml2.Replace(selected_role.ToString(), "");

Car je souhaite ensuite soit le mettre a jour, soit remettre le string sans ce mot :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
if (page_lst[j] == node.ChildNodes[i].Attributes[k].Value.ToString())
                                            {
                                                //Ecrit dans le node.ChildNodes[i].Attributes[m].Value
                                                list2.Item(0).ChildNodes[i].Attributes[m].Value = roles_var_xml + " " + temp_role;
 
                                            }
                                            else
                                            {
                                                list2.Item(0).ChildNodes[i].Attributes[m].Value = roles_var_xml.ToString();
                                            }

Et voici le XML :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<page>
  <siteMapNode title="User_Creation" url="User_Creation.aspx" roles="   test2 bo">
  </siteMapNode>
  <siteMapNode title="User_C2reation" url="User_Creatio2n.aspx" roles="    xorgrg2 test2 bo">
  </siteMapNode>
</page>

Merci à ceux qui prendront le temps de me lire car pour le moment, ca me laisse le mot d'origine que je souhaite supprimer dans roles.


Merci d'avance !