0

我有一个变量:

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

我想/my/xpath/expression在以下ref属性中使用<xf:input>

<xf:input ref="/my/xpath/expression"/>

在这里,我使用了硬编码的 XPath 表达式,但我想改用存储在$xpath变量中的 XPath 表达式,如下所示:

<xf:input ref="$xpath"/>

如何做到这一点?

4

1 回答 1

3

您可能的意思是 的值$xpath是一个字符串,无论是否是文字,然后您要对其进行评估。说起来不一样:

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

和:

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

在第一种情况下,变量$xpath包含一个 XPath 表达式,当变量需要它的值时会计算该表达式。结果将是一个 XPath 类型,例如字符串、元素,或者通常是任何 XPath 项序列 ( item()*)。如果你的表达式真的是 say /path/to/foo/bar,那么结果将是一个由零个或多个元素节点组成的序列 name bar

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

如果您希望另一个 XForms 构造对该字符串执行某些操作,而不是将其作为字符串进行处理,那么您将必须动态地评估该表达式。

有一个功能,saxon:evaluate()。所以你可以写:

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

您必须确保saxon命名空间前缀在范围内,其中:

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

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

于 2014-05-01T21:25:00.673 回答