你可以嵌套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>
可以使用它,还是可以将其简化为更紧凑的代码?
答案 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和验证。