Решение вашей задачи выглядит вот так:
<xsl:if test="@shift=0"><xsl:text><tr></xsl:text></xsl:if>
и соответсвенно
<xsl:text></tr></xsl:text>
для закрывания
Хотя я сейчас точно не помню, возможно надо будет добавить disable-output-escaping=«yes» в xsl:text
Но вообще говоря это не верное решение. Т.е. оно будет делать то, что вы хотите: добавлять открывающий и закрывающий тег tr в нужных местах, но так лучше не делать. Правильно делать так:
<?xml version="1.0" encoding="utf-8"?>
<top>
<persons-row>
<person count="1">
содержимое
</person>
<person count="6">
содержимое
</person>
</persons-row>
<persons-row>
<person count="7">
содержимое
</person>
<person count="9">
содержимое
</person>
</persons-row>
</top>
и xslt:
<xsl:for-each select="persons-row">
<tr>
<xsl:for-each select="person">
<td><xsl:value-of select="." /></td>
</xsl:for-each>
</tr>
</xsl:for-each>
Соответсвенно надо еще следить чтобы во всех строках было одинаковое количество td, ну это я думаю вы придумаете как сделать :)