2016-02-29 53 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