我的xsl就像
<root>
<tests>
<test id="222">
<actionId>233</actionId>
</test>
<test id="22">
<actionId>23333</actionId>
</test>
</tests>
<confs>
<conf id="2211"></conf>
</confs>
</root>
<xsl:key name="confId"
match="confs/conf"
use="@id" /
<xsl:template match="main">
Test:
<xsl:apply-templates select="tests/test" />
</xsl:template>
<xsl:template match="tests/test">
<xsl:choose>
<xsl:when test="actionId[.='']">
<li>
<xsl:choose>
<xsl:when test="key('confId', @id)">
Used </xsl:when>
<xsl:otherwise> Not found</xsl:otherwise>
</xsl:choose>
</li>
</xsl:when>
<xsl:otherwise> <li>Not at all found</li></xsl:otherwise>
</xsl:choose>
</xsl:template>
现在'发现并非完全'消息打印在此模板匹配的每次迭代上,因为actionId不为null,如果条件没有执行,我只需要打印一次。
预期输出
中迭代
答案 0 :(得分:0)
每次激活match =“test”模板时,它只能使用源文档中的test元素或模板参数或全局变量提供的信息。它不能使用以前激活的任何知识,因为XSLT是无状态的。
如果要以不同于其他元素的方式处理第一个测试元素,请编写两个不同的模板规则。
如果你想特别用actionId [。='']处理第一个测试元素,那么写一个匹配它的模板规则:
<xsl:template match="test[actionId[.=''][1]">