这就是我想要做的事情:
动态执行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中。
有可能吗?
答案 0 :(得分:2)
如果您正在寻找在Web浏览器中运行XQuery客户端,我建议您查看基于mxquery的解决方案,名为XQIB(浏览器中的XQuery):
据我所知,它允许从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
的用户的功能,甚至可以在执行之前检查字符串。