SPXSLT (SharePoint XSL Templates) Release 0.0.9
I’ve just released a new version of the SPXSLT Codeplex Project, version 0.0.9.
In this release, I added one new template called FixAmpersands. FixAmpersands is useful when you want to “join’ two lists in an AggregateDataSource in a Data View Web Part (DVWP) and the column you are uisng as the key may contain ampersands. This isn’t all that unusual if the keys are text values that don’t represent some sort of coding scheme, like a Product Code. Sometimes you may need to “join” two column values that contain ampersands, like “Beef & Kidney Pie” or “Tool & Die”. Because of the way that ampersands must be encoded on the Web, the primary value will contain the ampersand &
but the secondary value will contain an encoded ampersand &
. By calling FixAmpersands on the primary value, the “join” will work because the &
will be replaced with &
. (In fact, I had to monkey with the representations of the ampersands in that last sentence to get them to display correctly.)
The template is recursive, so it will replace *all* occurrences of &
with &
.
FixAmpersands looks like this:
<xsl:template name="FixAmpersands"> <xsl:param name="StringValue"/> <xsl:variable name="Ampersand" select="'&'" /> <xsl:choose> <xsl:when test="contains($StringValue, $Ampersand)"> <xsl:value-of select="concat(substring-before($StringValue, $Ampersand), '&amp;', substring-after($StringValue, $Ampersand))"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$StringValue"/> </xsl:otherwise> </xsl:choose> </xsl:template>
And you call it like this:
<xsl:varaible name="FixedTitle"> <xsl:call-template name="FixAmpersands"> <xsl:with-param name="StringValue" select="@Title"/> </xsl:call-template> </xsl:variable>
In the examples above, here’s what would happen:
Title | FixedTitle |
Beef & Kidney Pie | Beef & Kidney Pie |
Tool & Die | Tool & Die |
Sugar & Spice & Everything Nice | Sugar & Spice & Everything Nice |
I also fixed a small issue I noticed with the MultiSelectValueCheck.xsl file, which was missing the stylesheet wrapper.