在XSLT / Umbraco中检查for-each之前的项目计数

时间:2013-11-05 07:59:45

标签: xslt umbraco

我正在使用Umbraco解决方案中的XSLT文件。

如果没有要显示的元素,我希望整个ul标签消失:

<ul>
  <xsl:for-each select="umbraco.library:GetXmlNodeById($source)/child::* [@isDoc and string(umbracoNaviHide) != '1']">
    <li>
      <a href="{umbraco.library:NiceUrl(@id)}" class="menuitem">
        <xsl:value-of select="@nodeName"/>
      </a>
    </li>
  </xsl:for-each>
</ul>

如果foreach循环没有项目,如何制作一个跳过整个代码块的IF语句?

1 个答案:

答案 0 :(得分:3)

首先尝试将要选择的节点放入变量中,然后将 ul 元素的输出包装在xsl:if中测试节点数的位置。

这样的事情应该做:

<xsl:variable name="children" select="umbraco.library:GetXmlNodeById($source)/child::* [@isDoc and string(umbracoNaviHide) != '1']" />
<xsl:if test="count($children) > 0">
   <ul>
     <xsl:for-each select="$children">
       <li>
         <a href="{umbraco.library:NiceUrl(@id)}" class="menuitem">
           <xsl:value-of select="@nodeName"/>
         </a>
       </li>
     </xsl:for-each>
  </ul>
</xsl:if>