parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Devise 20.11.2006 14:50

У меня есть код, решающий проблему объединения ячеек в одном столбце, с учетом повторяемости данных в строках. а выглядит это следующим образом:

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method='html'/>

<xsl:template match="root">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
<style TYPE="text/css">
table td {
font-size:14;
}
p{
font-size:14;
}
</style>
</head>
<body>
<p>

<xsl:apply-templates/>

</p>
</body>

</html>
</xsl:template>

//обрабатываем все остальные столбцы
<xsl:template match="*">
<td>
<xsl:apply-templates/>
<xsl:if test="current()=''">
<xsl:text>&#160;</xsl:text>
</xsl:if>
</td>
</xsl:template>

//обрабатываем наши столбцы
<xsl:template match=" item1 | item2 ">
<xsl:variable name="pos" select="position()"/>
<xsl:variable name="val" select="."/>
<xsl:if test="not(../preceding-sibling::*[1]/*[$pos and .=$val])">
<xsl:variable name="rowspan">
<xsl:apply-templates select="." mode="calc-rowspan"/>
</xsl:variable>
<td rowspan="{$rowspan}">
<xsl:value-of select="."/>
</td>
</xsl:if>
</xsl:template>

<xsl:template match=" item1 | item2 " mode="calc-rowspan">
<xsl:param name="i" select="1"/>
<xsl:variable name="pos" select="position()"/>
<xsl:variable name="val" select="."/>
<xsl:variable name="next" select="../following-sibling::*[1]/*[$pos and .=$val]"/>
<xsl:choose>
<xsl:when test="$next">
<xsl:apply-templates select="$next" mode="calc-rowspan">
<xsl:with-param name="i" select="$i + 1"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$i"/></xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>