-1

idXSLTを使用して、要素の値が変更されるたびにテーブルの行の色を交互に(2色)するにはどうすればよいですか。1行おきに交互にするのは簡単です。残念ながら、for-each有効期限が切れると、変数はスコープ外になります。

これが私のxmlです:

<guests>
  <guest>
    <name>bob</name>
    <id>1</id>
  </guest>
  <guest>
    <name>tom</name>
    <id>2</id>
  </guest>
  <guest>
    <name>peter</name>
    <id>2</id>
  </guest>
  <guest>
    <name>jim</name>
    <id>4</id>
  </guest>
  <guest>
    <name>jake</name>
    <id>3</id>
  </guest>
  <guest>
    <name>dave</name>
    <id>3</id>
  </guest>
  <guest>
    <name>steve</name>
    <id>5</id>
  </guest>
  <guest>
    <name>joe</name>
    <id>5</id>
  </guest>
  <guest>
    <name>............</name>
    <id>...........</id>
  </guest>
</guests>
4

2 に答える 2

0

グループ化はこれに対処する良い方法だと思います。たとえば、次のようになります。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
  <xsl:key name="kGuest" match="guest" use="id"/>

    <xsl:template match="guests">
      <div>
        <xsl:apply-templates 
           select="guest[generate-id() = generate-id(key('kGuest', id)[1])]"
           mode="splitGroups" />
      </div>
    </xsl:template>

  <xsl:template match="guest" mode="splitGroups">
    <xsl:apply-templates select="key('kGuest', id)">
      <xsl:with-param name="class" 
                      select="concat('row-type', (position() - 1) mod 2 + 1)" />
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="guest">
    <xsl:param name="class" />
    <div class="{$class}">
      <xsl:value-of select="concat(id, ' - ', name)" />
    </div>
  </xsl:template>
</xsl:stylesheet>

サンプルで実行すると、次のものが生成されます。

<div>
  <div class="row-type1">1 - bob</div>
  <div class="row-type2">2 - tom</div>
  <div class="row-type2">2 - peter</div>
  <div class="row-type1">4 - jim</div>
  <div class="row-type2">3 - jake</div>
  <div class="row-type2">3 - dave</div>
  <div class="row-type1">5 - steve</div>
  <div class="row-type1">5 - joe</div>
  <div class="row-type2">........... - ............</div>
</div>

ご覧のとおり、 はとid が新しい値に変更されたときにclass切り替わります。type1type2

于 2013-01-26T17:39:01.120 に答える
0

XSLT には、行も列も色もありません。この XML から HTML テーブルを生成していて、行の色を制御したいということでしょうか。これまでに行ったことと、それが機能しない理由を提供してください。おそらく誰かがそれを見てくれるでしょう. ヒントが必要な場合は、id が変更されるたびに要素class='changed-id'に属性を追加することを検討できます。これは、 などで確認できます。次に、CSS で次のことができます。tr@id != preceding:name/@id.changed-id { color: pink; }

于 2013-01-26T17:03:25.173 に答える