使用xsl:key存储布尔表达式的结果

时间:2012-12-20 10:39:49

标签: xpath xslt-1.0 xslkey

在我的转换中有一个表达式,一些元素被反复测试。为了减少冗余,我想将其封装在这样的xsl:key中(不工作):

<xsl:key name="td-is-empty" match="td" use="not(./node()[normalize-space(.) or ./node()])" />

在成功评估表达式的情况下,预期行为是产生布尔值true的关键,否则false。然后我想按如下方式使用它:

<xsl:template match="td[not(key('td-is-empty', .))]" />

这是可能的,万一是的,怎么样?

1 个答案:

答案 0 :(得分:1)

我认为使用XSLT 1.0时,键值始终是字符串类型,因此在您的示例中,键值可以是字符串true或字符串false。然后,您可以调用key('td-is-empty', 'true')来查找表达式为true的所有td个元素节点,并key('td-is-empty', 'false')查找表达式为false的所有td元素。

您似乎希望使用您的密钥执行不同的操作,例如,根据节点标识存储每个use节点的td表达式的结果。我不认为这是密钥在XSLT中的工作方式。

[编辑] 但是,您可以将您的要求表达为

<xsl:template match="td[count(. | key('td-is-empty', 'false')) = count(key('td-is-empty', 'false'))]">...</xsl:template>

匹配那些td元素,这些元素是key('td-is-empty', 'false')找到的元素集的成员。