0

我的 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 不为空,如果不执行条件,我只需要打印一次。

预期输出是

  • 完全没有找到
  • 当测试/测试模板中的 actionId 从未找到匹配项时仅打印一次,即
  • 完全没有找到
  • 不在模板中迭代

    4

    1 回答 1

    0

    每次激活 match="test" 模板时,它只能使用通过源文档中的测试元素、模板参数或全局变量获得的信息。它不能使用任何先前激活的知识,因为 XSLT 是无状态的。

    如果您想以与其他元素不同的方式处理第一个测试元素,请编写两个不同的模板规则。

    如果你想特别处理第一个带有 actionId[.=''] 的测试元素,那么编写一个与之匹配的模板规则:

    <xsl:template match="test[actionId[.=''][1]">
    
    于 2012-04-20T11:17:34.147 回答