如何确定XSLT选择中的内部上下文节点

时间:2010-05-26 11:42:33

标签: xslt

我正在尝试使用用户定义的函数多维数据集来确定存储在变量objs中的节点子集:is_active:

    <xsl:variable name="active_cubes" select="$objs[cube:is_active(XXX) = 'TRUE']"/>

由于该函数不允许本地上下文,因此我需要将其作为参数传递(由XXX表示)。但是,通常的嫌疑人“。”或者“current()”不起作用,因为它们引用了周围块的上下文节点而不是被评估的objs的当前元素。

迄今为止唯一可行的解​​决方案是:

XXX=SOME_CHILD_TAG/..

但这非常难看,因为它取决于父节点是否存在正常工作的子标记。

还有其他方法吗?谢谢!

1 个答案:

答案 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()或'。'描述的上下文位置应该是$objssee here)中节点列表中的第n个项目。因此,$objs[cube:is_active(.) = 'TRUE']应该有效。

检查常见错误:

  • $ objs是否包含正确的节点,
  • 是否:cube:is_active返回字符串或布尔值,
  • $ objs中是否有多个节点,否则谓词根本没有意义。相反,您可以尝试使用xsl:if test
  • cube:is_active($objs) = 'TRUE'构造