我有一个变量:
<xf:var name="xpath" value="/my/xpath/expression"/>
我想在/my/xpath/expression
的{{1}}属性中使用ref
:
<xf:input>
这里我使用硬编码的XPath表达式,但我想改为使用存储在<xf:input ref="/my/xpath/expression"/>
变量中的XPath表达式,如下所示:
$xpath
如何实现这一目标?
答案 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/"
还有更多内容,即表达式在什么上下文中运行。在大多数情况下,它应该有效。