I've just been having this issue while using Xalan-c
The bit I didn't quite get initially is that the XPath or XSLT namespace aliases/prefixes can be different to that of the document - depending on your namespace resolver.
It appears that if there is a namespace on the doc, then it fails to match a path element unless a namespace is used. (standard but not always followed?)
The XalanDocumentPrefixResolver will map XPath or XSLT namespaces to URI and try and give them id by getting the prefix - where there is no prefix it used the name which turned into xmlns 
/xmlns:List/xmlns:Fields/xmlns:Field
Alternatively you could create your own resolver, but it still requires a minimal namespace used in the xpath :(
Here is one I hacked together while testing, no guarantee of memory
// don't care what prefix given, there can only be the one
struct NoPrefixResolver : public xalanc::PrefixResolver {
    NoPrefixResolver(const xalanc::XalanDOMString&   theURI) : m_uri(theURI){}
    virtual const xalanc::XalanDOMString*
        getNamespaceForPrefix(const xalanc::XalanDOMString&     prefix) const {
        return &m_uri;
    }
    virtual const xalanc::XalanDOMString&   getURI() const {
        return m_uri;
    }
    const xalanc::XalanDOMString    m_uri;
};
/x:List/x:Fields/x:Field 
/a:List/b:Fields/c:Field