1
<!-- Get the url of a node based on a list of positions (starting point = language root) -->
<xsl:template name="getUrl">
  <xsl:param name="id" />
  <xsl:param name="positions" />
  <xsl:param name="i" select="0" />
  <xsl:param name="max" />

  <!-- Return the url -->
  <xsl:if test="$i = $max">    
    <xsl:value-of select="umbraco.library:NiceUrl($id)" />    
  </xsl:if>

  <xsl:if test="$i &lt; $max">
    <xsl:call-template name="getUrl">
      <xsl:with-param name="id">
        <!-- Define the id of the next item in the tree structure -->
        <xsl:for-each select="//* [@id = $id]/child::* [@isDoc]">
          <xsl:if test="position() = number(umbraco.library:Split($positions, ',')/value[number($i)])">  
            <xsl:value-of select="@id" />
          </xsl:if>
        </xsl:for-each>
      </xsl:with-param>
      <xsl:with-param name="positions">
        <xsl:value-of select="$positions"/>
      </xsl:with-param>
      <xsl:with-param name="i">
        <xsl:value-of select="$i + 1"/>
      </xsl:with-param>
      <xsl:with-param name="max">
        <xsl:value-of select="$max"/>
      </xsl:with-param>    
    </xsl:call-template>
  </xsl:if>  
</xsl:template>

我正在使用带有 XLST 文件的宏。使用此代码时,出现错误(对于 Int32,值太大或太小)。错误发生在这两行:

<xsl:value-of select="umbraco.library:NiceUrl($id)" /> 
<xsl:call-template name="getUrl">

有人可以告诉我我在这里做错了什么,因为这个 XSLT 文件在每个页面上都可以正常工作,除了我创建的新页面。

4

1 回答 1

1

好的,我找到了解决方案:我为此部分添加了额外的检查:

<!-- Return the url -->
<xsl:if test="$i = $max"> 
  <xsl:if test="$id != '' ">  
    <xsl:value-of select="umbraco.library:NiceUrl($id)" />    
  </xsl:if>
</xsl:if>

这解决了我的问题。

于 2013-07-29T12:02:11.100 回答