Oh my, I just noticed we have a new xpath preprocessor in this patch too. Where did this code come from -- did you write it all from scratch?
I wrote it from scratch - libxml2 has not any API for iteration over XPath expression (different than iteration over XPath expression result), and what I have info, there will not be any new API in libxml2.
There are two purposes:
Safe manipulation with XPath expression prefixes - ANSI SQL design implicitly expects some prefix, but it can be used manually. The prefix should not be used twice and in some situations, when it can breaks the expression.
Second goal is support default namespaces - when we needed parser for first task, then the enhancing for this task was not too much lines more.
This parser can be used for enhancing current XPath function - default namespaces are pretty nice, when you have to use namespaces.