问题 :在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>