Traditional XPath will not work against nodes returned via a Sharepoint Webservice unless you use the (string,Namespacemanager) method and declare a namespace before using local names in a query
For example
Dim GroupName As XmlNode = xmlDoc.SelectSingleNode("/child::node()/child::node()/child::node()")
Will return the first child Group from the following
<GetGroupCollectionFromSitexmlns="http://schemas.microsoft.com/sharepoint/soap/directory/">
<Groups>
<GroupID="3804"Name="GroupName"Description="GroupSelection"OwnerID="1"OwnerIsUser="True" />
</Groups>
</GetGroupCollectionFromSite>
This returns nothing
Dim GroupName As XmlNode = xmlDoc.SelectSingleNode("/GetGroupCollectionFromSite/Groups/Group")
until you add the namespacemanager and import the node into an xmldocument
Dim xmlDoc As XmlDocument = New XmlDocument()
Dim xmlGroupList As XmlNode = Users.GetGroupCollectionFromSite()
xmlDoc.LoadXml(xmlGroupList.OuterXml)
Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xmlDoc.NameTable)
nsmgr.AddNamespace("ab", "http://schemas.microsoft.com/sharepoint/soap/directory/")
Dim GroupName As XmlNode = xmlDoc.SelectSingleNode("/ab:GetGroupCollectionFromSite/ab:Groups/ab:Group[@ID='3804']", nsmgr)
Returns the Group Node with the ID of 3804
Hopefully this will save some other XML/XPath newbies some debugging time
SPD automatically adds a Namespace to your queries without having to do the above.