This week I re-discovered a technique for displaying a random item from a list using XSL. This can apply to both Content Query Web Parts (CQWP) and XSLT List View Web Parts (XLV) and is actually a very trivial piece of XSL.
The technique goes something like:
- Get a count of how many items to choose a random item from, say RowCount
- Return a random number between 1 and RowCount
- Use that random number to display a list item
The important bit is discovering/ remembering that there is a function available to use in SharePoint in the ddwrt namespace that generates a random number between two given numbers. It is this ddwrt:Random(1, RowCount) function that allows us to achieve our objective.
The XSL could look something like this:
<xsl:stylesheet version="1.0" exclude-result-prefixes="x d xsl ddwrt" xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"> <xsl:template match="/"> <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row" /> <xsl:variable name="RowCount" select="count($Rows)" /> <xsl:variable name="RandomNumber" select="ddwrt:Random(1, $RowCount)" /> <xsl:for-each select="$Rows[position() = $RandomNumber]"> <xsl:value-of select="@Title" /> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Note, even though we’re only displaying a single item we are still querying and returning potentially many items. For this reason I’d only recommend using this technique on relatively small lists.









Can an InfoPath sharepoint list template / browser enabled form work without using the applications?
html XQuery XPath
xml list
asp
CQWP, Lists, XLV, XSL
etc.
clicking view source on the browser enabled form that queries the sharepoint list can this code be edited to make it work?