每次'column3'的值发生变化时,我都会尝试在行之间创建间隙。目前,差距设置为每2行出现一次,这不是我需要的。 例如,前10行中'column3'的值为1,1,3,3,3,3,5,5,5,5 我希望在最后的'1'和第一个'3'等之间存在差距。
<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>
答案 0 :(得分:3)
您可以在XPath中使用 follow-sibling 轴来执行此操作。
<xsl:if test="Column3 != following-sibling::Market[1]/Column3">
即。下一个市场元素是否具有 Column3 元素具有不同的值。
例如,给定以下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。)