-1

使用 XSLT,每次id元素中的值更改时,我如何交替(2 种颜色)表中的行颜色。每隔一行交替很简单。不幸的是,当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

XSLT 没有行、列或颜色。我猜你的意思是说你正在从这个 XML 生成一个 HTML 表,并且想要控制行颜色?请提供您到目前为止所做的事情以及为什么它不起作用,也许然后有人会看看它。如果您需要提示,您可以考虑在 id 更改时class='changed-id'向元素添加一个属性tr,您可以通过类似@id != preceding:name/@id. 然后在你的 CSS 中你可以做.changed-id { color: pink; }.

于 2013-01-26T17:03:25.173 回答
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之间type1以及何时切换。type2

于 2013-01-26T17:39:01.120 回答