Xslt 根据字母表的范围匹配案例
我有下面的XMLXslt 根据字母表的范围匹配案例,xslt,xslt-2.0,Xslt,Xslt 2.0,我有下面的XML <para>39B</para> <para>76</para> 我试过的代码 <xsl:template match="text()"> <xsl:analyze-string select="." regex="([\w]+)"> <xsl:matching-substring> <xsl:variable name="regex1">
<para>39B</para>
<para>76</para>
我试过的代码
<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>
案例1
案例2
请告诉我如何解决这个问题
感谢使用XSLT2.0,您可以使用正则表达式,因此对于字母数字的情况,您可以使用正则表达式
<xsl:template match="para[matches(., '^39[A-P]$')]">case1</xsl:template>
case1
第二种情况下的简单数字比较
<xsl:template match="para[. ge 72 and . le 85]">case2</xsl:template>
案例2
请解释这些范围在输入XML和XSLT代码中的位置。嗨,martin,有没有一种方法可以将其与包含
一起使用,比如包含(text(),“^39[a-P]$”)
在文本模板中?正则表达式匹配的函数称为匹配
,不包含只进行子字符串包含测试的
。因此,如果要使用正则表达式,必须使用匹配项。至于在文本节点上使用它,当然,如果需要,您可以这样做,但是请注意,我的建议故意使用^
和$
锚定模式,以确保内容与模式完全相同,而不只是包含在元素中。如果要忽略的模式前后可能有其他字符,请使用para[matches(,'39[A-P]')]
。我已根据您的建议用我尝试过的内容更新了我的问题,但这不起作用,请您帮助我修复它。我要求包含
,因为我想在选择
中使用它,有多个这样的实例28,我只需要使用text()
模板匹配来获取内容如果你想使用正则表达式匹配,你需要使用匹配
函数,而不是包含
函数。不管是XSLTxsl:template match=“…”
还是xsl:when test=“…”
。至于“这不起作用”,例如,示例输入有39B
,您现在添加的代码有regex=“([\w]+)\([\w]+)”
,这永远不会匹配,因为para
元素中没有点
。漂亮的XSLT表达式,加上一个。
<xsl:template match="para[. ge 72 and . le 85]">case2</xsl:template>