Subject: RE: [xsl] for-each-group and result-document splitting to less files. From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 10 Sep 2008 18:27:31 +0100 |
> -- though makes me curious... how hard would it be to change > this so that the groupings were based on the count() of items > in the nodeset? > i.e. make divisions that were basically equal regardless of the input? > So if there were almost no entries in the first half of the > alphabet, the first division would be a-r, then s-t (if a lot > there), then u-w (if few there), etc. maybe passing how many > sets to split it into total? If the sorted sequence is $in, and you want to split it roughly into $n groups, then you can take the size of a group as ceiling(count($in) div $n). Then the letters that form the starts of groups might have initial letters $initialLetters := distinct-values('a', for $i in 1 to $n return substring($in[ceiling(count($in) div $n)]/@title, 1, 1)) The next step is to construct the translation table such as 'aaaaaaffffffsssssvvvvv' by replacing each letter in a-z with the highest letter from $initialLetters that is <= the letter in question, that is: $alphabet := for $i in 1 to 26 return substring('abcdefghijklmnopqrstuvwxyz', $i, 1) $transTable := string-join(for $c in $alphabet return max($initialLetters[. le $c]), '') Not tested, of course. Michael Kay http://www.saxonica.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] for-each-group and result, James Cummings | Thread | Re: [xsl] for-each-group and result, Wendell Piez |
Re: [xsl] for-each-group and result, James Cummings | Date | Re: [xsl] for-each-group and result, Wendell Piez |
Month |