不使用循环就按位置获取节点

时间:2011-06-15 19:37:58

标签: xml xslt position

无论如何在xslt中直接从列表中获取节点而不使用for-each循环:

试过这个,但它似乎没有用:

 <xsl:variable name="currentNode" select="$currentPage/ * [position() = 4]" />

任何帮助将不胜感激。

只是添加到此:

<xsl:template name="checkmonth">
      <xsl:param name="stringOfMonths" />
      <xsl:param name="n" />
      <xsl:param name="currentCount" />

      <!--get node in list -->

      <xsl:variable name="currentNode" select="$currentPage/ * [position() = $currentCount]" />
      <xsl:variable name="dateOfNode" select="$currentNode" />


      <xsl:choose>
      <xsl:when test="not(contains($stringOfMonths,dateOfNode/@createDate))">
        <xsl:value-of select="$dateOfNode/@createDate" />
      <xsl:if test="$currentCount &lt; $n">
          <xsl:call-template name="checkmonth">
          <xsl:with-param name="stringOfMonths" select="concat($stringOfMonths," ",$dateOfNode/@createDate />
          <xsl:with-param name="n" select="$n" />
          <xsl:with-param name="currentCount" select="$currentCount + 1" />
        </xsl:call-template>
      </xsl:if>
      </xsl:when>
      <xsl:otherwise>
      <xsl:if test="$currentCount &lt; $n">
         <xsl:call-template name="checkmonth">
          <xsl:with-param name="stringOfMonths" select="$stringOfMonths" />
          <xsl:with-param name="n" select="$n" />
          <xsl:with-param name="currentCount" select="$currentCount + 1" />
        </xsl:call-template>
      </xsl:if>
      </xsl:otherwise>
      </xsl:choose>
</xsl:template>

我有一个在不同日期创建的节点列表,我想生成这些节点创建的月份列表。 'n'是列表中的节点总数

1 个答案:

答案 0 :(得分:0)

你的专栏:

<xsl:variable name="currentNode" select="$currentPage/*[position() = $currentCount]" />

很好。您应该询问(并检查自己)$currentPage/*是否包含位置$currentCount的节点。

此外,你正在写“试过这个,但它似乎没有用:”。你是如何检查变量值的?在模板内部,您只是定义变量,并且没有指示显示其值。你可以尝试:

<xsl:copy-of select="$currentNode"/>

<xsl:value-of select="$currentNode"/>

仍然“尝试了这个,但它似乎没有工作:”,它只是一个“可能”或转换会给你一个错误?哪种错误?