我如何能够正确地阻止< ol>如果组为空,则生成: 我有这个(丑陋的)代码:
......
</a>
<xsl:if test="not(empty(current-group() except current-group()[1]))">
<ol>
<xsl:for-each select="current-group() except current-group()[1]">
<li>
....
</li>
</xsl:for-each>
</ol>
</xsl:if>
....
答案 0 :(得分:1)
您可以使用xsl:choose
<xsl:choose>
<xsl:when test="">
<!-- with <ol> -->
</xsl:when>
<xsl:otherwise>
<!-- without <ol> -->
</xsl:otherwise>
</xsl:choose>
答案 1 :(得分:1)
您可以将test
简化为
<xsl:if test="current-group()[2]">
因为这对于单身人士组来说是一个空序列(视为假)。
或者声明一个变量以避免代码重复:
<xsl:variable name="listItems" select="current-group()[position() gt 1]"/>
<xsl:if test="$listItems">
<ol>
<xsl:for-each select="$listItems">
...
答案 2 :(得分:1)
很少有语言能够满足您正在考虑三个条件的简单事实。
If there are things put something at the start
For each thing do an action
If there are things put something at the end
唯一具有近似值的语言是Django及其for ... empty
语法,但即便如此也不一样。
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athletes in this list.</li>
{% endfor %}
</ul>
如果您希望在有项目的情况下出现该列表,那么您的例子就是最好的逻辑,这是Ian Roberts提出的建议。
要做你要求的事情需要:
<xsl:wierd-for-each select="current-group() except current-group()[1]">
<xsl:wrapper-element name="ol" />
<xsl:looped-things>
<li>
....
</li>
<xsl:looped-things>
</xsl:for-each>
执行looped-things
,然后在执行循环时将其插入到create元素中。更加务实的方法就是如你所做的那样,将循环包装在<ol>
中,然后根据需要将其包装在<xsl:if>
中。