嵌套<xsl:if>&amp;的<xsl:当> </XSL:当> </XSL:如果>

时间:2010-07-01 14:38:54

标签: xml xslt

你可以嵌套xsl:if在嵌套的xsl:when中,例如:

    <xsl:choose>
        <xsl:when test="param/@id  =  '1' " >
            <xsl:if test="param/value = 'XML' ">
                <xsl:when test="param/@id = '2' ">
                    <xsl:if test="param/value = 'HTTP' ">
                        <xsl:when test="param/@id = '3' ">
                            <xsl:if test="param/value = 'Y' ">
                                <xsl:call-template name="buildPayload"/>
                            </xsl:if>
                        </xsl:when>
                    </xsl:if>
                </xsl:when>
            </xsl:if>
        </xsl:when>
    </xsl:choose>

可以使用它,还是可以将其简化为更紧凑的代码?

3 个答案:

答案 0 :(得分:7)

不尝试:我认为<xsl:when>不能是<xsl:if>的子节点,而中间没有<xsl:choose>。但是,你想做什么?如果我看到了这一点,那么当且仅当<call-template>时,您才想运行(param/@id='1' and param/value='XML') or (param/@id='2' and param/value='HTTP') or (param/@id='3' and param/value='Y') ...尝试将其作为测试值:

<xsl:if test="(param/@id='1' and param/value='XML') or (param/@id='2' and param/value='HTTP') or (param/@id='3' and param/value='Y')">
    <xsl:call-template name="buildPayload"/>
</xsl:if>

答案 1 :(得分:1)

是的,这看起来不行。您可以在测试中添加“和”和“或”作为时间。

答案 2 :(得分:0)

您可能需要阅读XPath。您应该能够使用XPath表达式和节点选择语法来帮助进行此选择。

您也可以尝试使用可视化XSLT设计器,例如Visual Studio中的工具。例如,Visual Studio将为XSLT提供IntelliSense和验证。