1

在我的转换中有一个表达式,一些元素被反复测试。为了减少冗余,我想把它封装成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', .))]" />

这是可能的,如果是的话,怎么做?

4

1 回答 1

1

我认为对于 XSLT 1.0,键值始终是 string 类型,因此在您的示例中,键值可以是 stringtrue或 string false。然后,您可以调用key('td-is-empty', 'true')以查找td表达式为真的所有元素节点,并key('td-is-empty', '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')

于 2012-12-20T13:31:16.517 回答