Hi Marc,

I have not used it, or even claim to understand it, but https://github.com/jpcs/transform.xq might give you some ideas.
It avoids eval by using an EBNF to  pre-generate an  XPath parser in XQuery.

/Andy



On 13 November 2014 21:51, Marc van Grootel <marc.van.grootel@gmail.com> wrote:
Hi,

I would like to ask some advice.

For my Origami[1] library I'm exploring different ways of providing
more powerful selectors for nodes in a template document.

As this is for a templating library I would like to offer string based
selectors and am considering if I should go for CSS-style selectors or
XPath selectors.

I started on CSS selectors to be able to select nodes with selectors
like "p#id" and "li.class" but to do this properly it involves quite a
bit of string manipulation in order to support more advanced stuff.

Being in a language that already has XPath in it, it would be much
more natural and powerful to use XPath selectors. This led me to look
at xquery:eval.

So far I resisted using eval but the code is a lot simpler that way.
Implementing CSS-style selectors would probably lead me down a path
with a lot more ugly string manipulation.

I'm aware that it's better to express these things in XQuery code and
that is also possible. But it's so much nicer to read this:

  xf:extract(xf:select('li'), $doc)

then this:

  xf:extract(function($node) { $node/li }, $doc)

I'm interested in pros and cons of using xquery:eval with XPath
string-selectors. How is the performance? Other downsides (such as
being non-standard)?

Thanks

--Marc

[1] https://github.com/xokomola/origami