2009-11-15 3 views
39

У меня есть этот простой код:XSL для каждого: как обнаружить последний узел?

<xsl:for-each select="GroupsServed"> 
    <xsl:value-of select="."/>,<br/> 
</xsl:for-each></font> 

Я пытаюсь добавить запятую для каждого элемента добавляется.

Это имеет 2 недостатки:

  1. Случай, когда есть только один пункт: код должен безоговорочно добавить запятую.
  2. Случай с более чем 1 товаром: последний элемент имел бы запятую.

Как вы считаете наиболее оптимальным решением для решения этой проблемы?

Я использую XSLT 2.0

+2

Этот вопрос может быть полезен http://stackoverflow.com/questions/798269/xslt-concat-string-remove-last-comma –

+0

, но на самом деле я хочу включить новую строку для каждого элемента также. – sivabudh

ответ

70

Если вы используете XSLT 2.0, канонический ответ на проблемы

<xsl:value-of select="GroupsServed" separator=", " /> 

В XSLT 1.0, то несколько CPU-дорогой подход к поиску последнего элемент в множестве узлов является

<xsl:if test="position() = last()" /> 
+1

спасибо за подход XSLT 1.0. Он отлично работал на моем 2.0 – sivabudh

+0

. Я не должен пытаться ответить на эти вопросы с помощью телефона. Я добавил подробные сведения о методе XSLT2.0, если раньше это не было ясно. – Stobor

26

Окончательный ответ:

<xsl:for-each select="GroupsServed"> 
    <xsl:value-of select="."/>          
    <xsl:choose> 
    <xsl:when test="position() != last()">,<br/></xsl:when> 
    </xsl:choose> 
</xsl:for-each> 
2
<xsl:variable name="GROUPS_SERVED_COUNT" select="count(GroupsServed)"/> 
<xsl:for-each select="GroupsServed"> 
    <xsl:value-of select="."/> 
    <xsl:if test="position() < $GROUPS_SERVED_COUNT"> 
     ,<br/> 
    </xsl:if> 
</xsl:for-each></font> 
Смежные вопросы