XSLT:foreach有一个嵌套的IF子句,如何得到“第一个真正的结果”?

时间:2014-11-01 15:11:58

标签: xslt foreach

我在以下XSLT代码中遇到问题。

Foreach循环生成14条记录,其中4条由

选择

<xsl:if test="esperto = 'F'">

子句。

<xsl:for-each select="../partite/risultatopartita">
  <xsl:if test="esperto = 'F'">
    <tr>
      <xsl:if test="position()=1">
        <td rowspan="4" class='centra'>Favorite</td>
      </xsl:if>
      <td class='centra'>                            
        <xsl:value-of select="posizione"/>  
      </td>
      <td class='centra'>                            
        <xsl:value-of select="squadra1"/>
      </td>
      <td class='centra'>                            
        <xsl:value-of select="squadra2"/>
      </td>
    </tr>
  </xsl:if>
 </xsl:for-each>

我需要首先TD(一个rowspan="4")只会第一次打印,但“第一次if子句为true,而不是第一次foreach迭代” 。

事实上,<xsl:if test="position()=1">获得了第一次foreach迭代,但显然有可能满足<xsl:if test="esperto = 'F'">的迭代不能成为foreach的第一个迭代。

如何解决?


所需的HMTL代码是:

<table>
    <tr>
      <td rowspan="4" class='centra'>Favorite</td>
      <td class="centra">2</td>
      <td class="centra">fooText 1</td>
      <td class="centra">foofooText 1</td>
    </tr>
    <tr>
      <td class="centra">6</td>
      <td class="centra">fooText 2</td>
      <td class="centra">foofooText 2</td>
    </tr>
    <tr>
      <td class="centra">10</td>
      <td class="centra">fooText 3</td>
      <td class="centra">foofooText 3</td>
    </tr>
    <tr>
      <td class="centra">14</td>
      <td class="centra">fooText 4</td>
      <td class="centra">foofooText 4</td>
    </tr>
</table>

2 个答案:

答案 0 :(得分:1)

如果没有输入XML,很难找到答案。 您可以使用以下代码代替for-each块:

<xsl:for-each select="../partite/risultatopartita">
<xsl:if test="esperto = 'F'">
    <tr>
        <xsl:if test="not(preceding-sibling::risultatopartita/esperto='F')">
            <td rowspan="4" class='centra'>Favorite</td>
        </xsl:if>
        <td class='centra'>                            
            <xsl:value-of select="posizione"/>  
        </td>
        <td class='centra'>                            
            <xsl:value-of select="squadra1"/>
        </td>
        <td class='centra'>                            
            <xsl:value-of select="squadra2"/>
        </td>
    </tr>
</xsl:if>
</xsl:for-each>

答案 1 :(得分:1)

而不是

<xsl:for-each select="../partite/risultatopartita">
  <xsl:if test="esperto = 'F'">

你应该在select表达式中添加一个谓词,即使用

<xsl:for-each select="../partite/risultatopartita[esperto = 'F']">

应该这样做,至少只要你的真实代码除了xsl:if内的xsl:for-each之外什么都没有。