我正在尝试实现一种逻辑,如果符合条件,它将选择一个值。问题是,如果我的列表中包含的元素多于一个,它将不会显示与条件匹配的值,而只会显示第一个。您能提供一些建议吗?谢谢。我需要它来实现按条件的多重过滤。这意味着在此for-each中,我将只显示2008年的书籍,但在另一张表中,我也可以使用年份列表中的2010年。下面的示例是一个使用2008年表格的模板的一部分,但是我将有多个表格在2010年之前也可以过滤图书。
XSL:
<xsl:for-each select="years">
<xsl:choose>
<xsl:when test="year=2008">
<td class="year"><xsl:value-of select="year"/></td>
</xsl:when>
</xsl:choose>
</xsl:for-each>
XML:
<book>
<title>Professional ASP.NET 4 in C# and VB</title>
<author>Bill Evjen, Scott Hanselman, Devin Rader</author>
<country>USA</country>
<price>580</price>
<years>
<year>2010</year>
<year>2008</year>
</years>
</book>
此人会将 2010 填充到我的HTML中,而不是我期望的 2008 中。这完全可行吗?
更新:
我尝试过这种方法,例如分别针对多个条件进行过滤:
<xsl:for-each select="library/book">
<tr>
<td class="filterTd title"><xsl:value-of select="title"/></td>
<td class="filterTd author"><xsl:value-of select="author"/></td>
<td class="filterTd price"><xsl:value-of select="price"/></td>
<xsl:for-each select="years/year[.2008]">
<td class="year">
<xsl:value-of select="."/>
</td>
</xsl:for-each>
<xsl:for-each select="years/year[.2010]">
<td class="year">
<xsl:value-of select="."/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
在我看来,这根本不会填充任何td。
答案 0 :(得分:1)
如果您只想显示特定年份的图书,则可以在xsl:for-each
中设置一个条件以选择图书
<xsl:for-each select="library/book[years/year=$year]">
其中$ year是包含所需年份的变量(或参数)
请注意,如果您知道要处理特定的年份,则实际上不需要执行<xsl:value-of select="year" />
,只需输出您正在使用的年份值即可。
尝试使用此XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" />
<xsl:template match="/">
<xsl:call-template name="table">
<xsl:with-param name="year" select="2008" />
</xsl:call-template>
</xsl:template>
<xsl:template name="table">
<xsl:param name="year" />
<table>
<xsl:for-each select="library/book[years/year=$year]">
<tr>
<td class="filterTd title"><xsl:value-of select="title"/></td>
<td class="filterTd author"><xsl:value-of select="author"/></td>
<td class="filterTd price"><xsl:value-of select="price"/></td>
<td class="year">
<xsl:value-of select="$year"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
请注意,您还可以在此处使用键按年份查询图书
<xsl:key name="booksByYear" match="book" use="years/year" />
然后,xsl:for-each
用于选择书籍,如下所示:
<xsl:for-each select="key('booksByYear', $year)">