Mi capita alle volte di fare query xpath e di non veder restituito nulla... capita quando ci sono i namespaces di mezzo :)
...e tutte le volte me ne dimentico!!!
Posto un esempio che ho appena fatto per poter settare a "False" tutti i CopyLocal="True" di un progetto di Visual Studio.NET
1 private void ProcessProj(string file)
2 {
3 XmlDocument doc = new XmlDocument();
4 doc.Load(file);
5
6 bool isChanged = false;
7
8 // aggiungo il namespace
9 XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
10 ns.AddNamespace("pr", "http://schemas.microsoft.com/developer/msbuild/2003");
11
12 // prendo i nodi che hanno private a true
13 XmlNodeList nodes =
14 doc.SelectNodes(@"//pr:Project/pr:ItemGroup/pr:Reference/pr:Private[text()='True']", ns);
15
16 // faccio sostituzione
17 foreach (XmlNode nodename in nodes)
18 {
19 nodename.InnerText = "False";
20 isChanged = true;
21 }
22
23 if (isChanged)
24 doc.Save(file);
25 }
26