我需要选择cd base所有带有参数年份和艺术家的cd,如果已经设置,但如果没有 - 我需要显示所有的CD' s。我知道我可以设置*符号来显示所有但我试图这样做
<xsl:param name="year" select="*" >
<xsl:param name="artist" select="*" />
如果没有设置参数,它就不起作用,它什么都没有显示。
<xsl:for-each select="cd">
<xsl:sort select="*[name()=$sortBy]" order="{$order}" />
<xsl:if test="year = $year">
<xsl:if test="artist = $artist">
<tr>
<td><xsl:value-of select="artist"/></td>
<td><xsl:value-of select="album"/></td>
<td><xsl:value-of select="year"/></td>
<td><xsl:value-of select="studio"/></td>
<td width="100px" height="100px"><xsl:apply-templates select="link"/></td>
</tr>
</xsl:if>
</xsl:if>
</xsl:for-each>
答案 0 :(得分:0)
使用XSLT 1.0,通常的方法是使用
将默认值定义为空字符串<xsl:param name="artist" select="''"/>
<xsl:param name="year" select="''"/>
然后在你使用的谓词中。
<xsl:for-each select="cd[(not($artist) or $artist = artist) and (not($year) or $year = year)]">...</xsl:for-each>