Строки зебры в xslt - PullRequest
       1

Строки зебры в xslt

2 голосов
/ 05 августа 2011

Я создаю таблицу из xml с использованием xslt, и я хочу, чтобы все остальные были другим классом.

Вот XML:

<interfaces>
  <interface id="250" name="112test" odd="1"></interface>
  <interface id="251" name="113test" odd="0"></interface>
</interfaces>

Вот соответствующая часть xslt, которую я пробовал:

<xsl:template match="interfaces">
  <xsl:for-each select="interface">
    <xsl:choose>
      <xsl:when test="@odd = '1'">
        <tr class="odd">
      </xsl:when>
      <xsl:otherwise>
        <tr>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:for-each>
</xsl:template>

Как мне заставить это работать? Или есть лучший способ сделать это, например, проверить, существует ли атрибут, вместо проверки его значения?

Ответы [ 4 ]

3 голосов
/ 05 августа 2011
<xsl:choose>
  <xsl:when test="position() mod 2 = 1">odd</xsl:when>
  <xsl:otherwise>even</xsl:otherwise>
</xsl:choose>

Осциллирует между четными / нечетными узлами ...

2 голосов
/ 05 августа 2011

Не проверено, но должно работать что-то вроде следующего.

<tr>
   <xsl:if test="@odd = '1'">
      <xsl:attribute name="class">odd</xsl:attribute>
    </xsl:if>
    ... other stuff here
</tr>
1 голос
/ 10 августа 2011

Идеальным решением оказалось сочетание user639175 и ответов Мэтью Уилсона:

<xsl:if test="position() mod 2 = 1">
   <xsl:attribute name="class">odd</xsl:attribute>
</xsl:if>
0 голосов
/ 05 августа 2011

Избавьте себя от головной боли и используйте JQuery или предпочитаемый вами фреймворк, если он имеет соответствующие селекторы.

$(‘tr’:odd).addClass('stripe');

или CSS 3

tr:nth-child(odd) { background-color:#eee; }

Сохраняйте разметку чистой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...