2016-02-29 85 views
0

我是XSLT新手。我正在使用邮政编码,我试图将零码填充到5个字符以内的任何邮政编码。否则,我希望我的代码完全按照原样编写输入参数。邮编开头或包含字母时遇到问题。我的输出正在返回一个NaN。我该如何告诉代码:只要邮政编码中包含一个字母,就可以直接写出邮政编码而不需要运行“格式编号”逻辑?我知道“开始”和“包含”的功能,但我不完全明白他们是如何工作的。XSLT - 格式编号输出NaN

<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> 

回答

0

如何:

<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> 

这不承担任何(数字)邮编可以有5位数以上。如果这是不正确的,你可以使用:

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

可能更好写'号($ BillToZipCode)< 1000'(或者是10000?),使转换明确。 XSLT 1.0会隐式执行,但如果您将字符串与数字进行比较,则2.0会发生抱怨。 –

+0

@MichaelKay你有一个点(实际上是两个)。 –

+0

工作正常!谢谢! – SHIGuy