0

这是我想要做的:

动态执行包含在 Javascript 变量示例中的 XQUERY

var myxquery = For Channels.Channel

where Channel/availability = yes

And Channels.Channel/Label = 'CNN'

Return  EXIST(Channels.Channel/Id)';

var xmltoparse= '<channel>
<available>yes</available>
<label>CNN</label>
</channel>
<channel>
<available>yes</available>
<label>BBC</label>
</channel>'

这意味着myxquery对 var xmltoparse 执行 var 并将 xquery 的结果存储在另一个 var 中。

可能吗?

4

2 回答 2

2

如果您正在寻找在例如 web 浏览器中运行 XQuery 客户端,我建议您查看名为 XQIB(浏览器中的 XQuery)的基于 mxquery 的解决方案:

http://www.xqib.org/

据我所知,它允许从 XQuery 调用 JavaScript 函数,反之亦然。

如果在浏览器中运行 XML 标准客户端的想法吸引您,您可能还对 Saxon-CE 感兴趣:

http://www.saxonica.com/ce/index.xml

根据您实际尝试实现的目标,使用 XForms 对您来说可能也很有趣。它允许在您的页面中保存(XML)数据模型,并应用各种动态评估。有一些客户端实现,其中 XSLTForms 是一个相当不错的实现:

http://www.agencexml.com/xsltforms

于 2013-04-24T05:22:56.557 回答
0

是的,通过使用eval(). 但这会使您的 Web 服务暴露于注入攻击(这种特定的模式将使它变得非常容易)。这就是为什么通常不推荐它的原因。

但是,如果您仍然需要这样做,您可以创建一个 XQY 端点,该端点将字符串作为参数,然后将该字符串的值传递给eval(). 调用的确切方式eval()将根据您的 XQuery 处理器而有所不同,因为规范中没有定义它。即:在 eXist 中,它是util:eval(); 在 MarkLogic 中是xdmp:eval(); 等等

如果您必须使用此模式,则使用一切必要的手段来锁定它:强身份验证、限制执行 . 的用户的能力eval,甚至可能在执行之前检查字符串。

于 2013-04-23T20:46:46.163 回答