Единственное исправление, которое вы можете сделать, не внося больших изменений в свой XSLT, - это изменить шаблон ColumnBreak
, чтобы проверить, является ли предыдущий брат другим, чем Item
. В этом случае вы можете добавить «пустую» ячейку
<xsl:template match="ColumnBreak" mode="sibling">
<xsl:param name="row"/>
<xsl:param name="col"/>
<xsl:if test="not(preceding-sibling::*[1][self::Item])">
<cell row="{$row}" col="{$col}" empty="true" />
</xsl:if>
<xsl:apply-templates select="following-sibling::*[1]" mode="sibling">
<xsl:with-param name="row" select="$row"/>
<xsl:with-param name="col" select="$col + 1"/>
</xsl:apply-templates>
</xsl:template>
Затем в своем основном шаблоне вы можете проверить наличие пустых ячеек
<xsl:for-each select="key('cell-by-col', concat(@row, '|', @col))">
<xsl:if test="not(@empty)">
<xsl:value-of select="."/>
<br/>
</xsl:if>
</xsl:for-each>
На самом деле, вы даже можете опуститьотметьте здесь @empty
, если вы рады, что пустая ячейка имеет тег <br />
.
См. http://xsltfiddle.liberty -development.net / jz1PuP1