xpath中的变量

owe*_*ter 3 xpath xquery exist-db

我在eXist上写xquery .

通常我用这种方式在xml中选择项目:

fn:doc($document_name)/root/a
Run Code Online (Sandbox Code Playgroud)

但现在我想从字符串变量中获取xpath:

let $xpath := request:get-parameter("xpath", "")
fn:doc($document_name)/$xpath
Run Code Online (Sandbox Code Playgroud)

当然它不起作用.我现在找到的唯一方法是使用eval:

util:eval(fn:concat("fn:doc($document_name)", $xpath)):)
Run Code Online (Sandbox Code Playgroud)

但我不想使用,eval因为它很慢而且不安全.

我知道有类似的东西:

fn:doc($document_name)/*[name()='node_name']
Run Code Online (Sandbox Code Playgroud)

但我想通过整个路径选择项目,但不仅仅是节点的名称,我也尝试使用node-xpath()但不知道如何使用它就像name()

Mic*_*Kay 5

你想要做eval()函数所做的事情,所以任何解决方案都会遇到与eval相同的问题.您可以考虑的另一种方法是生成查询然后执行它,但它会有完全相同的问题.如果您认为将字符串限制为XPath表达式的子集(例如,没有谓词或没有函数调用)可能更安全,那么您可以尝试使用简单的正则表达式测试这些条件.