动态评估存储在变量中的XPath

时间:2014-04-25 11:02:42

标签: xml xpath orbeon xforms xbl

我有一个变量:

<xf:var name="xpath" value="/my/xpath/expression"/>

我想在/my/xpath/expression的{​​{1}}属性中使用ref

<xf:input>

这里我使用硬编码的XPath表达式,但我想改为使用存储在<xf:input ref="/my/xpath/expression"/> 变量中的XPath表达式,如下所示:

$xpath

如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

你可能意味着$xpath的值是一个字符串,无论是否是文字,然后你要评估它。这是不同的说法:

<xf:var name="xpath" value="/my/xpath/expression"/>

<xf:var name="xpath" value="'/my/xpath/expression'"/>

在第一种情况下,变量$xpath包含一个XPath表达式,当变量需要其值时,该表达式将被计算。结果将是XPath类型,例如字符串,元素,或者通常是任何XPath项目序列(item()*)。如果您的表达式确实是/path/to/foo/bar,那么结果将是一个零个或多个名为bar的元素节点的序列。

在第二种情况下,请注意引号'。这意味着$xpath的值是字符串

如果你想要另一个XForms构造对该字符串做一些事情,而不是用字符串作为字符串,你必须动态地评估该表达式。

有一个函数,saxon:evaluate()。所以你可以写:

<xf:input ref="saxon:evaluate($xpath)"/>

您必须确保saxon名称空间前缀在范围内,并使用:

xmlns:saxon="http://saxon.sf.net/"

还有更多内容,即表达式在什么上下文中运行。在大多数情况下,它应该有效。