如果我正在测试几个不同的已定义参数,我可以在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>
,以后需要帮助调用不同的模板。
答案 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行代码,容易出错),建议尽可能经常使用