It would help to see examples of XPath expressions that don't work as you think they should. Here are some possible causes (mistakes I frequently make).
Assume an XML document such as:
<A> <B> <C d='e'/> </B> <C/> <D xmlns="http://foo"/> </A>
forgetting to remove the top-level slash ('/') representing the document:
document.XPathSelectElements("/A") // selects a single A node
document.XPathSelectElements("//B") // selects a single B node
document.XPathSelectElements("//C") // selects two C nodes
but
aNode.XPathSelectElements("/B") // selects nothing (this looks for a rootNode with name B) aNode.XPathSelectElements("B") // selects a B node bNode.XPathSelectElements("//C") // selects TWO C nodes - all descendants of the root node bNode.select(".//C") // selects one C node - all descendants of B
(This is often a problem when the root node carries a prefixless namespace - easy to miss)