我正在尝试使用用户定义的函数多维数据集来确定存储在变量objs中的节点子集:is_active:
<xsl:variable name="active_cubes" select="$objs[cube:is_active(XXX) = 'TRUE']"/>
由于该函数不允许本地上下文,因此我需要将其作为参数传递(由XXX表示)。但是,通常的嫌疑人“。”或者“current()”不起作用,因为它们引用了周围块的上下文节点而不是被评估的objs的当前元素。
迄今为止唯一可行的解决方案是:
XXX=SOME_CHILD_TAG/..
但这非常难看,因为它取决于父节点是否存在正常工作的子标记。
还有其他方法吗?谢谢!
答案 0 :(得分:0)
您需要使用xslt处理器支持的node-set()
函数。
即
<xsl:variable name="active_cubes" select="exsl:node-set($objs)[cube:is_active(XXX) = 'TRUE']"/>
该示例假定您的处理器支持exsl:node-set功能。显然,您必须使用xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
声明命名空间。
修改强>
current()或'。'描述的上下文位置应该是$objs
(see here)中节点列表中的第n个项目。因此,$objs[cube:is_active(.) = 'TRUE']
应该有效。
检查常见错误:
xsl:if
test
cube:is_active($objs) = 'TRUE'
构造