我有一个XSL模板:
<!--Define the column widths for the schedule-->
<xsl:template name="SetColumnWidths">
<!--The widths in the column classes will add up to 100%-->
<xsl:choose>
<xsl:when test="@NumberClasses=1">
<colgroup>
<col class="columnTime"/>
<col class="columnTheme1Class"/>
<col class="columnName"/>
</colgroup>
</xsl:when>
<xsl:when test="@NumberClasses=2">
<colgroup>
<col class="columnTime"/>
<col class="columnTheme2Class"/>
<col class="columnName"/>
<col class="columnName"/>
</colgroup>
</xsl:when>
<xsl:when test="@NumberClasses=3">
<colgroup>
<col class="columnTime"/>
<col class="columnTheme3Class"/>
<col class="columnName"/>
<col class="columnName"/>
<col class="columnName"/>
</colgroup>
</xsl:when>
</xsl:choose>
</xsl:template>
我想扩展它,以便,如果没有 NumberClasses 属性,它与 NumberClasses = 1 完全相同。
我该怎么做?
谢谢!
答案 0 :(得分:2)
您可以使用以下表达式:
<xsl:when test="not(@NumberClasses) or @NumberClasses = '1'">
答案 1 :(得分:1)
您可以使用<xsl:otherwise>
更新(因为似乎不清楚这应该如何运作),即使Tim C的答案更合适。
在我看来,在xsl:otherwise
中设置xsl:choose
始终是一个上帝的想法,如果你这样做,它也可以像xsl:when
中的一个那样做。
在问题的情况下甚至可以删除第一个
因此,以下可能有效:
<xsl:choose>
<xsl:when test="@NumberClasses=2">
<colgroup>
<col class="columnTime"/>
<col class="columnTheme2Class"/>
<col class="columnName"/>
<col class="columnName"/>
</colgroup>
</xsl:when>
<xsl:when test="@NumberClasses=3">
<colgroup>
<col class="columnTime"/>
<col class="columnTheme3Class"/>
<col class="columnName"/>
<col class="columnName"/>
<col class="columnName"/>
</colgroup>
</xsl:when>
<xsl:otherwise>
<colgroup>
<col class="columnTime"/>
<col class="columnTheme1Class"/>
<col class="columnName"/>
</colgroup>
</xsl:otherwise>
</xsl:choose>
答案 2 :(得分:0)
您是否考虑过:
<xsl:template name="SetColumnWidths">
<!--The widths in the column classes will add up to 100%-->
<xsl:variable name="n" select="xs:integer((@NumberClasses, 1)[1])"/>
<colgroup>
<col class="columnTime"/>
<col class="columnTheme{$n}Class"/>
<xsl:for-each select="1 to $n">
<col class="columnName"/>
</xsl:for-each>
</colgroup>
</xsl:template>
(需要XSLT 2.0)