【问题标题】:variable in xpathxpath中的变量
【发布时间】:2011-12-19 04:06:59
【问题描述】:

我正在eXist 上写 xquery。

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

fn:doc($document_name)/root/a

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

let $xpath := request:get-parameter("xpath", "")
fn:doc($document_name)/$xpath

当然不行。 我现在发现的唯一方法是使用eval

util:eval(fn:concat("fn:doc($document_name)", $xpath)):)

但我不想使用eval,因为它速度慢且不安全。

我知道有这样的:

fn:doc($document_name)/*[name()='node_name']

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

【问题讨论】:

    标签: xpath xquery exist-db


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      尽管 Michael Kay 是对的,但 functx:dynamic-path() 可能会有所帮助。

      它可能是介于 fn:eval 和动态生成查询之间的一个很好的中间解决方案。

      希望对你有帮助

      迈克尔

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      相关资源
      最近更新 更多