SHIGuy
SHIGuy

Reputation: 13

XSLT - Format-number output NaN

I'm new to XSLT. I'm working with zip codes and I'm trying to padleft zeros to any zipcode under 5 characters. Otherwise, I want my code to simply write the input parameter exactly as is. I'm running into a problem when the zipcode starts with or contains a letter. My output is returning a NaN. How do I tell the code that whenever the zipcode contains a letter, to simply write out the zipcode as is without running the "format-number" logic? I know about the "starts-with" and "contain" functions but I don't totally understand how they work.

<xsl:template name="MyZipCodeUnder5DigitsPadLeftZerosTemplate">
<xsl:param name="BillToZipcode" />

<xsl:choose>

 <xsl:when test="string-length($BillToZipcode) &lt; 5">
    <xsl:element name="PostalCode">
       <xsl:value-of select="format-number($BillToZipcode, '00000')" />
    </xsl:element>
  </xsl:when>

<xsl:otherwise>
   <xsl:element name="PostalCode">
    <xsl:value-of select="$BillToZipcode"/>
   </xsl:element>
</xsl:otherwise>

</xsl:choose>
</xsl:template>

Upvotes: 1

Views: 9746

Answers (1)

michael.hor257k
michael.hor257k

Reputation: 116993

How about:

<xsl:template name="MyZipCodeUnder5DigitsPadLeftZerosTemplate">
    <xsl:param name="BillToZipcode" />
    <PostalCode>
        <xsl:choose>
            <xsl:when test="number($BillToZipcode)">
                <xsl:value-of select="format-number($BillToZipcode, '00000')" />
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$BillToZipcode"/>
            </xsl:otherwise>
        </xsl:choose>
    </PostalCode>   
</xsl:template>

This assumes no (numerical) Zipcode can have more than 5 digits. If this is not true, you could use:

<xsl:when test="number($BillToZipcode) &lt; 10000">

Upvotes: 2

Related Questions