printed from column1 instead of column0.
use position() -1 instead of position(), but you are making it far
more complicated than it need be
For example
<xsl:for-each select="row">
<xsl:apply-templates select=".">
<xsl:with-param name="rownumber" select="position()"/>
</xsl:apply-templates>
</xsl:for-each>
could just be
<xsl:apply-templates select="row"/>
then your row template just needs to be
<xsl:template match="row">
<xsl:variable name="rownumber" select="position()">
...
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list