У меня есть структура:
<root>
<relation type="relation1">
<entityType1>a</entityType1>
<entityType2>1</entityType2>
<entityType2>2</entityType2>
<entityType2>3</entityType2>
</relation>
<relation type="relation2">
<entityType3>b</entityType3>
<entityType4>7</entityType4>
<entityType4>8</entityType4>
<entityType4>9</entityType4>
</relation>
<relation type="relation3">
<entityType5>c</entityType3>
<entityType6>10</entityType4>
<entityType6>11</entityType4>
<entityType6>12</entityType4>
</relation>
</root>
Мне нужно преобразовать через XSLT в таблицу HTML, которая содержит:
<table>
<tr class="odd"><td>
a --> 1
</td></tr>
<tr><td>
a --> 2
</td></tr>
<tr class="odd"><td>
a --> 3
</td></tr>
<tr><td>
b --> 7
</td></tr>
<tr class="odd"><td>
b --> 8
</td></tr>
<tr><td>
b --> 9
</td></tr>
<tr class="odd"><td>
c --> 10
</td></tr>
<tr><td>
c --> 11
</td></tr>
<tr class="odd"><td>
c --> 12
</td></tr>
</table>
Обратите внимание на нечетные / четные чередования строк таблицы,Мне нужно также закодировать их через XSLT.Возможно?
Основной вопрос на самом деле, как я могу сохранить переменную индекса, чтобы указать, является ли текущая строка нечетной или четной при анализе этой структуры.Этого было бы достаточно, чтобы решить эту проблему, потому что в настоящее время у меня есть ... для двух типов отношений, а затем я выполняю итерацию через for-each overlation1 / entityType2 и другую для for-each over ratio2 / entityType4.
Спасибо!
UPDATE-1:
Обратите внимание, что результирующая таблица выполняет итерации по XML-элементам относительности1 и реляции2 и должна каким-то образом поддерживать глобальный индекс, который выполняется между обоими типами отношений, чтобы правильноустановить нечетный / четный класс при завершении итерации отношение1 и переходе к отношению 2.
ОБНОВЛЕНИЕ-2:
В настоящее время у меня есть код, похожий на этот, но я не знаю, как легко рефакторингэто обработать установку class = "odd" на tr.Шаблоны Display_Relation в настоящее время отображают текст для отношений.
<xsl:template match="relation">
<xsl:choose>
<xsl:when test="contains(@xsi:type, 'relation1')">
<xsl:for-each select="entityType2">
<tr><td>
<xsl:call-template name="Display_Relation1">
<xsl:with-param name="source" select="../entityType1/text()"/>
<xsl:with-param name="destination" select="./text()"/>
</xsl:call-template>
</td></tr>
</xsl:for-each>
</xsl:when>
<xsl:when test="contains(@xsi:type, 'relation2')">
<xsl:for-each select="entityType4">
<tr><td>
<xsl:call-template name="Display_Relation2">
<xsl:with-param name="source" select="../entityType3/text()"/>
<xsl:with-param name="destination" select="./text()"/>
</xsl:call-template>
</td></tr>
</xsl:for-each>
</xsl:when>
<xsl:when test="contains(@xsi:type, 'relation3')">
<xsl:for-each select="entityType6">
<tr><td>
<xsl:call-template name="Display_Relation3">
<xsl:with-param name="source" select="../entityType5/text()"/>
<xsl:with-param name="destination" select="./text()"/>
</xsl:call-template>
</td></tr>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:template>