根据范围与字母匹配案例
match cases based on range with alphabets
我有以下XML。
<para>39B</para>
<para>76</para>
在这里我可以匹配到确切的数字,但是当有如下提到的范围时,问题就出现了。
if the range 39A-39P
print case1
if the range 72-85
print case2
我试过的代码
<xsl:template match="text()">
<xsl:analyze-string select="." regex="([\w]+)">
<xsl:matching-substring>
<xsl:variable name="regex1">
<xsl:choose>
<xsl:when test="contains(regex-group(1), '^39[A-P]$')">
<xsl:text>CAse 1</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>Case 2</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select = "$regex1"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
请告诉我如何解决这个问题。
谢谢
对于 XSLT 2.0,您可以使用正则表达式,因此对于字母数字大小写,您可以使用
<xsl:template match="para[matches(., '^39[A-P]$')]">case1</xsl:template>
以及第二种情况的简单数字比较
<xsl:template match="para[. ge 72 and . le 85]">case2</xsl:template>
我有以下XML。
<para>39B</para>
<para>76</para>
在这里我可以匹配到确切的数字,但是当有如下提到的范围时,问题就出现了。
if the range 39A-39P
print case1
if the range 72-85
print case2
我试过的代码
<xsl:template match="text()">
<xsl:analyze-string select="." regex="([\w]+)">
<xsl:matching-substring>
<xsl:variable name="regex1">
<xsl:choose>
<xsl:when test="contains(regex-group(1), '^39[A-P]$')">
<xsl:text>CAse 1</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>Case 2</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select = "$regex1"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
请告诉我如何解决这个问题。
谢谢
对于 XSLT 2.0,您可以使用正则表达式,因此对于字母数字大小写,您可以使用
<xsl:template match="para[matches(., '^39[A-P]$')]">case1</xsl:template>
以及第二种情况的简单数字比较
<xsl:template match="para[. ge 72 and . le 85]">case2</xsl:template>