Nachtrag zu:
Die XSL-Codestelle ... 1 to 4 ... bezieht sich auf die Anzahl der Stellen pro Segment, hier also bis 4 Stellen. Diese Zahl könnte auch noch dynamisch ermittelt werden ...
... hier in Form der Variable $s:
<xsl:variable name="n" select="fn:max(for $k in knoten return fn:count(fn:tokenize($k,'\.')))"/>
<xsl:variable name="s" select="fn:max(for $j in 1 to $n return for $k in knoten return fn:string-length(fn:tokenize($k,'\.')[$j]))"/>
<xsl:apply-templates select="knoten">
<xsl:sort select="fn:number(fn:string-join(for $i in (1 to $n) return fn:concat(fn:string-join(for $i in (1 to $s - fn:string-length(fn:tokenize(.,'\.')[$i])) return '0',''), fn:tokenize(.,'\.')[$i]),''))" data-type="number" order="ascending"/>
</xsl:apply-templates>
Grüße,
Thomas