Here is one way to do it with XSLT 2.0:
Code:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output indent="yes"/>
<xsl:template match="element">
<xsl:variable name="length" select="string-length(value[1])"/>
<xsl:for-each-group select="value/string-to-codepoints(.)" group-by="position() mod $length">
<xsl:sort select="position()" order="descending"/>
<row>
<xsl:value-of select="codepoints-to-string(current-group())"/>
</row>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
That transforms
Code:
<element>
<value>123</value>
<value>456</value>
<value>789</value>
</element>
into
Code:
<row>369</row>
<row>258</row>
<row>147</row>
You can run XSLT 2.0 with Saxon 9 or AltovaXML or XmlPrime.