Переменная накопления в XSLT - PullRequest
2 голосов
/ 22 августа 2011

У меня есть таблица, каждая строка состоит из 7 столбцов, а в виде 5 ячеек:

 <ROW>
   <CELL ROWSPAN="1" COLSPAN="1">1</CELL>
   <CELL ROWSPAN="1" COLSPAN="1">Mandrel</CELL>
   <CELL ROWSPAN="1" COLSPAN="1">1</CELL>
   <CELL ROWSPAN="1" COLSPAN="2">H079249303</CELL>
   <CELL ROWSPAN="1" COLSPAN="2">H079249301</CELL>
 </ROW>

Теперь мой шаблон сопоставляется с каждым отдельным <CELL> и превращает их в <entry>, а для тех, у кого значение @COLSPAN больше 1 (как в последних двух ячейках выше), мне нужно иметь namest и атрибут namend для них, например, приведенный выше код превратится в:

  <row>
    <entry>1</entry>
    <entry>Mandrel</entry>
    <entry>1</entry>
    <entry namest="c4" nameend="c5">H079249303</entry>
    <entry namest="c6" nameend="c7">H079249301</entry>
  </row>

Я могу отслеживать количество предшествующих братьев и сестер, но на самом деле не знаю, как суммировать атрибут @COLSPAN всех предшествующих братьев и сестер, поскольку XSLT не допускает увеличения переменной.

Спасибо за помощь.

1 Ответ

3 голосов
/ 22 августа 2011

Посмотрите на функцию sum, то есть:

XSLT :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="ROW">
    <row>
      <xsl:apply-templates select="CELL"/>
    </row>
  </xsl:template>

  <xsl:template match="CELL">
    <entry>
      <xsl:if test="@COLSPAN > 1">
        <xsl:attribute name="namest">
          <xsl:value-of select="concat('c', sum(preceding-sibling::CELL/@COLSPAN) + 1)"/>
        </xsl:attribute>

        <xsl:attribute name="nameend">
          <xsl:value-of select="concat('c', sum(preceding-sibling::CELL/@COLSPAN) + @COLSPAN)"/>
        </xsl:attribute>
      </xsl:if>

      <xsl:value-of select="."/>
    </entry>
  </xsl:template>

</xsl:stylesheet>

Выход :

<row>
  <entry>1</entry>
  <entry>Mandrel</entry>
  <entry>1</entry>
  <entry namest="c4" nameend="c5">H079249303</entry>
  <entry namest="c6" nameend="c7">H079249301</entry>
</row>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...