When it comes to XSL you have to pay particular attention to the schema of the XML you are trying to make use of. There are certain cases when you do not have control over the XML being produced that your XSL needs to be generic.
I am currently updating a Community Portal, which I developed in the past for my current company and have just discovered a silly human error. Yes. I made a bad mistake. The coding for this system assumed that there would be no spaces in a post code when trying to build a list of links.
The block was along the lines of:
The block to attach the post code just checked the length of the post code, split it into two, then concatenate with a space. This logic did not check for a space. So the following method needs to be used in a conditional:
As you can see, the space character is denoted within the single quotes. So:
This is much more cleaner, where the post code is used appropriately. The sample code above is for the original post code strings with more than 6 characters, so there are further checks for different post code sizes.
I am currently updating a Community Portal, which I developed in the past for my current company and have just discovered a silly human error. Yes. I made a bad mistake. The coding for this system assumed that there would be no spaces in a post code when trying to build a list of links.
The block was along the lines of:
<a target="_blank">
<xsl:attribute name="href">
<xsl:value-of select="@theLink" />
<!-- Check length of string and attach post code with a space -->
</xsl:attribute>
<xsl:attribute name="title">
<!-- Attach the title of the link for accessibility-->
</xsl:attribute>
<xsl:value-of select="@linkText" />
</a>
The block to attach the post code just checked the length of the post code, split it into two, then concatenate with a space. This logic did not check for a space. So the following method needs to be used in a conditional:
test="contains(//ResultItem/UKAddressStructure/BS7666Address/PostCode, ' ')"
As you can see, the space character is denoted within the single quotes. So:
<xsl:choose>
<!-- It already has a space so we don't need to format -->
<xsl:when test="contains(//ResultItem/UKAddressStructure/BS7666Address/PostCode, ' ')">
<xsl:value-of select="//ResultItem/UKAddressStructure/BS7666Address/PostCode" />
</xsl:when>
<!-- No spaces. So we need to split the post code and concatenate with a space -->
<xsl:otherwise>
<xsl:value-of select='substring(//ResultItem/UKAddressStructure/BS7666Address/PostCode,1,4)' />
<xsl:text>%20</xsl:text>
<xsl:value-of select='substring(//ResultItem/UKAddressStructure/BS7666Address/PostCode,5)' />
</xsl:otherwise>
</xsl:choose>
This is much more cleaner, where the post code is used appropriately. The sample code above is for the original post code strings with more than 6 characters, so there are further checks for different post code sizes.
Blogged with Flock
Comments