多个xsl:在单个xsl:when中选择

时间:2010-06-30 15:33:03

标签: xml xslt

如果我正在测试几个不同的已定义参数,我可以在xsl:when语句中调用多个xsl:choose语句吗?如果我有:

<parameters>
                    <param id="1">
                        <key>Load</key>
                        <value>XML</value>
                    </param>
                    <param id="2">
                        <key>Input</key>
                        <value>Http</value>
                    </param>
                    <param id="3">
                        <key>Response</key>
                        <value>Y</value>
                    </param> 
</parameters> 

我可以使用一个<xsl:when>调用三个不同的<xsl:choose>来检查,因为我将会有几个<param>具有不同的<value>,以后需要帮助调用不同的模板。

2 个答案:

答案 0 :(得分:5)

是的,当然,你可以。您还可以添加xsl:otherwise节点来处理所有其他情况:

<xsl:choose>
    <xsl:when test="param/@id = '1'">
        <xsl:text>XML</xsl:text>
    </xsl:when>
    <xsl:when test="param/@id = '2'">
        <xsl:text>HTTP</xsl:text>
    </xsl:when>
    <xsl:when test="param/@id = '3'">
        <xsl:text>Y</xsl:text>
    </xsl:when>
    <xsl:otherwise>
        <xsl:text>Other format</xsl:text> 
    </xsl:otherwise>
</xsl:choose>

这类似于C语言和Java中的switch语句,或VB中的Select Case

当然,您可以检查任意XPath表达式,例如

也可以查看
<xsl:when test="param/key = 'Input'">
    <!-- handle input -->
</xsl:when>

答案 1 :(得分:3)

  我可以打电话给三个不同的人    一个人   检查因为我会   几个不同的   以后需要帮忙打电话   不同的模板。

是的,你可以和@ 0xA3向你展示如何。

但你不需要也不应该!

XSLT的精神在于XSLT处理器可以决定在什么条件下应用哪个模板。

此转化:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="param[@id=1]">
    Load!
 </xsl:template>

 <xsl:template match="param[@id=2]">
    Input!
 </xsl:template>

 <xsl:template match="param[@id=3]">
    Response!
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档

<parameters>
    <param id="1">
        <key>Load</key>
        <value>XML</value>
    </param>
    <param id="2">
        <key>Input</key>
        <value>Http</value>
    </param>
    <param id="3">
        <key>Response</key>
        <value>Y</value>
    </param>
</parameters>

<强>产生

<parameters>
    Load!

    Input!

    Response!
 </parameters>

请注意我们没有使用任何条件逻辑 - XSLT处理器本身决定使用哪个模板申请具有不同<param>属性的id元素。 / p>

这是一个很棒的工具(在这个具体案例中,您保存了14行代码,容易出错),建议尽可能经常使用