2012-05-25 3 views
1

Я пытаюсь создать промежуток между строками каждый раз, когда изменяется значение «column3». В настоящий момент пробел устанавливается, чтобы появляться каждые 2 строки, что не то, что мне нужно. Например, значение «column3» в первых 10 строках равно 1,1,3,3,3,3,5,5,5,5 И я хочу промежуток между последними «1» и «первым» 3 'и т.д.Позиция XSLT() на основе значения столбца

<xsl:for-each select="Market"> 
     <tr> 
      <td> 
      <xsl:value-of select="Column1"/> 
      </td> 
      <td> 
      <xsl:value-of select="Column2"/> 
      </td> 
      <td> 
      <xsl:value-of select="Column3"/> 
      </td> 
     </tr> 
      <xsl:if test="(position() mod 2 = 0)"> 
      <tr> 
      <td colspan="5" height="25px" /> 
      </tr> 
     </xsl:if> 

ответ

3

Вы могли бы использовать следующий-родственного оси в XPath, чтобы сделать это.

<xsl:if test="Column3 != following-sibling::Market[1]/Column3"> 

т.е. ли следующий рынка элемент имеет колонка3 элемент с другим значением.

К примеру, учитывая следующие XML

<Markets> 
    <Market> 
     <Column1>A</Column1> 
     <Column3>1</Column3> 
    </Market> 
    <Market> 
     <Column1>A</Column1> 
     <Column3>1</Column3> 
    </Market> 
    <Market> 
     <Column1>A</Column1> 
     <Column3>3</Column3> 
    </Market> 
    <Market> 
     <Column1>A</Column1> 
     <Column3>3</Column3> 
    </Market> 
    <Market> 
     <Column1>A</Column1> 
     <Column3>3</Column3> 
    </Market> 
    <Market> 
     <Column1>A</Column1> 
     <Column3>3</Column3> 
    </Market> 
    <Market> 
     <Column1>B</Column1> 
     <Column3>4</Column3> 
    </Market> 
    <Market> 
     <Column1>B</Column1> 
     <Column3>4</Column3> 
    </Market> 
</Markets> 

Когда вы примените следующие XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes"/> 
    <xsl:template match="/Markets"> 
     <table> 
     <xsl:apply-templates select="Market"/> 
     </table> 
    </xsl:template> 

    <xsl:template match="Market"> 
     <tr> 
     <td> 
      <xsl:value-of select="Column1"/> 
     </td> 
     <td> 
      <xsl:value-of select="Column3"/> 
     </td> 
     </tr> 
     <xsl:if test="Column3 != following-sibling::Market[1]/Column3"> 
     <tr> 
      <td colspan="2" height="25px"/> 
     </tr> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

Тогда следующий выводится

<table> 
    <tr> 
     <td>A</td> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td>A</td> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td colspan="2" height="25px"/> 
    </tr> 
    <tr> 
     <td>A</td> 
     <td>3</td> 
    </tr> 
    <tr> 
     <td>A</td> 
     <td>3</td> 
    </tr> 
    <tr> 
     <td>A</td> 
     <td>3</td> 
    </tr> 
    <tr> 
     <td>A</td> 
     <td>3</td> 
    </tr> 
    <tr> 
     <td colspan="2" height="25px"/> 
    </tr> 
    <tr> 
     <td>B</td> 
     <td>4</td> 
    </tr> 
    <tr> 
     <td>B</td> 
     <td>4</td> 
    </tr> 
</table> 

(Обратите внимание, что я пропустил из COLUMN2 просто для некоторой краткости).