在我的转换中有一个表达式,一些元素被反复测试。为了减少冗余,我想将其封装在这样的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', .))]" />
这是可能的,万一是的,怎么样?
答案 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')
找到的元素集的成员。