I am for sure missing some important detail here. I just cannot make .NET's XPath work with Visual Studio project files.
Let's load an xml document:
var doc = new XmlDocument();
doc.Load("blah/blah.csproj");
Now execute my query:
var nodes = doc.SelectNodes("//ItemGroup");
Console.WriteLine(nodes.Count); // whoops, zero
Of course, there are nodes named ItemGroup in the file. Moreover, this query works:
var nodes = doc.SelectNodes("//*/@Include");
Console.WriteLine(nodes.Count); // found some
With other documents, XPath works just fine. I am absolutely puzzled about that. Could anyone explain me what is going on?
You probably need to add a reference to the namespace http://schemas.microsoft.com/developer/msbuild/2003
.
I had a similar problem, I wrote about it here. Do something like this:
XmlDocument xdDoc = new XmlDocument();
xdDoc.Load("blah/blah.csproj");
XmlNamespaceManager xnManager =
new XmlNamespaceManager(xdDoc.NameTable);
xnManager.AddNamespace("tu",
"http://schemas.microsoft.com/developer/msbuild/2003");
XmlNode xnRoot = xdDoc.DocumentElement;
XmlNodeList xnlPages = xnRoot.SelectNodes("//tu:ItemGroup", xnManager);