在Javascript中动态执行xquery并将结果存储在JS变量中

时间:2013-04-23 20:36:50

标签: javascript xml xquery

这就是我想要做的事情:

动态执行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>'

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

有可能吗?

2 个答案:

答案 0 :(得分:2)

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

http://www.xqib.org/

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

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

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

根据你实际想要实现的目标,使用XForms也可能对你有意义。它允许在页面中保存(XML)数据模型,并应用各种动态评估。有一些客户端实现,其中XSLTForms非常好:

http://www.agencexml.com/xsltforms

HTH!

答案 1 :(得分:0)

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

但是,如果您仍需要执行此操作,则可以创建一个XQY端点,该端点将字符串作为参数,然后将该字符串的值传递给eval()。 inboke eval()的确切方法因您的XQuery处理器而异,因为它没有在规范中定义。即:在eXist中,它是util:eval();在MarkLogic中它是xdmp:eval();等

如果必须使用此模式,则使用锁定它的所有必要手段:强身份验证,限制执行eval的用户的功能,甚至可以在执行之前检查字符串。