This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: how to output elements in random order?


Hi Massimo,

> Is there a standard (clean) way to process (output) elements in random
> order, possibliy specifiyng a "seed" as a parameter to the stylesheet?
> 
> It's not just a speculation. One motivation, for example, is that I'm
> tryng to use XSLT to produce randomly premuted multiple choice tests for
> grading students. Given a set of questions each one with a various number
> of possible answers, I wuold like to output questions in random order and
> answers within a quastion in random order too.

Well, it is just a pseudo random number. But you cannot expect more than this.
So, how to compute this pseudo number from the input data and a seed parameter?

What about this: compute $seed divided by the string length of the node
and pick some of the digits in the fraction part as sort key. If some
nodes (questions) have the same length, you can also include the position
in your computation.

Example:
<xsl:param name="seed" select="1" />

<xsl:template match="test">
  <xsl:for-each select="question">
    <xsl:sort select="substring(substring-after(
                         $seed div (position() * string-length()), '.'),
                      3, 4)" 
              data-type="number" />
    <xsl:value-of select="." />
  </xsl:for-each>
</xsl:template>

Cheers,
Oliver


/-------------------------------------------------------------------\
|  ob|do        Dipl.Inf. Oliver Becker                             |
|  --+--        E-Mail: obecker@informatik.hu-berlin.de             |
|  op|qo        WWW:    http://www.informatik.hu-berlin.de/~obecker |
\-------------------------------------------------------------------/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]