在XSL中利用递归,进展字符串切割
在XSL中利用递归,进行字符串切割
问题 :在XSL解析XML的时候,在XML中有这样一个字符串2.16.840.1.113883.6.1数据 ,需要根据最后一个“.”后面的数字来进行输出格式化。当等于1的时候,输出门诊;为2的时候,输出急诊;为3的时候,输出住院。
思路 :因为最后“."前面有多少数据值不清楚,怎样才能获得那个数值呢?所以利用递归的方法,利用substring-after(var,pattern) function, 循环的去除最后一个“."前面的数据值,直到没有“."了之后,则表明达到最后一个”."后面的数据了
程式 :
<xsl:template name="showStatus"> <xsl:param name="status"/> <xsl:variable name="newStatus" select="substring-after($status,'.')"/> <xsl:choose> <!-- 当截取之后的字符串中,依然含有. 的时候,递归处理 --> <xsl:when test="contains($newStatus,'.')"> <xsl:call-template name="showStatus"> <xsl:with-param name="status" select="$newStatus" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="$newStatus = '1'"> <xsl:text>門診</xsl:text> </xsl:when> <xsl:when test="$newStatus = '2'"> <xsl:text>急診</xsl:text> </xsl:when> <xsl:when test="$newStatus = '3'"> <xsl:text>住院</xsl:text> </xsl:when> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template>