Сам спросил - сам ответил =) Со stackoverflow
XSLT 1.0. Три варианта.
Дважды используется following-sibling, что некрасиво и непроизводительно.
<xsl:for-each select="//tag[@ROWNUM = following-sibling::tag/@ROWNUM]">
    <name>
        <xsl:value-of select="."/>
        <xsl:variable name="rownum" select="@ROWNUM"/>
        <xsl:value-of select="./following-sibling::tag[@ROWNUM = $rownum]"/>
    </name>
</xsl:for-each>
Используем ключ. И два цикла, что тоже неизящно.
<xsl:key name="num" match="tag" use="@ROWNUM"/><xsl:for-each select="//tag[@ROWNUM = following-sibling::tag/@ROWNUM]/@ROWNUM">
    <name>
        <xsl:for-each select="key('num', .)">
            <xsl:value-of select="."/>
        </xsl:for-each>
    </name>
</xsl:for-each>
Опять используем ключ. Вместо второго цикла используем доступ по индексу.
<xsl:key name="num" match="tag" use="@ROWNUM"/><xsl:for-each select="//tag[@ROWNUM = following-sibling::tag/@ROWNUM]/@ROWNUM">
    <name>
        <xsl:value-of select="key('num', .)[1]"/>
        <xsl:value-of select="key('num', .)[2]"/>
    </name>
</xsl:for-each>