首页 > 解决方案 > XSLT/Xpath:如何找出某个东西是或不是关键(如果)?

问题描述

我在 XSLT 中的代码有问题。我正在使用钥匙功能,在那里我发现钥匙里是否有东西。

    <xsl:key name="hlp" match="help" use="@id" />
    ...
    <xsl:if test="key('hlp', @some_id) !=''">
    ...
    </xsl:if>

这是正确的,它给了我我想要的东西,但是我如何做出相反的条件,@some_id 不在关键 hlp 中......我的意思是:

    <xsl:if test="key('hlp', @some_id) <!--is equal--> ''">
    ...
    </xsl:if>

XSLT/XPath 中有类似的东西吗?

标签: if-statementxsltxpathxslt-2.0xpath-2.0

解决方案


调用key('x', 'y')时,结果是键等于的节点集'y'。您可以使用 empty() 函数(在 XSLT 2.0 中)或 not() 函数在 XSLT 1.0 中测试节点集是否为空:

<xsl:if test="not(key('x', 'y'))" version="1.0">...</xsl:if>
<xsl:if test="empty(key('x', 'y'))" version="2.0">...</xsl:if>

或用于逆向测试(测试是否找到了某些东西):

<xsl:if test="key('x', 'y')" version="1.0">...</xsl:if>
<xsl:if test="exists(key('x', 'y'))" version="2.0">...</xsl:if>

通过将结果与字符串进行比较来进行测试是错误的。如果函数的结果是空节点集,则测试key('x','y')=''key('x','y')!=''都将返回 false ;key()相反,如果key()函数选择两个节点,一个有内容,另一个没有,那么两个测试都将返回 true。


推荐阅读