Xslt regex包含给出错误的输出

Xslt regex包含给出错误的输出,xslt,Xslt,我有下面的XML代码 <pgs>IVA.004, 168IA.002</pgs> 当我运行这个IVA.004时,它给我的输出是,而不是。请让我知道我哪里出了问题,我怎样才能解决这个问题。这是一把小提琴 谢谢字符串IVA.004匹配'V'和'IV',并且在xsl:choose/xsl:when中使用了第一个truexsl:when,因此您需要更改xsl:choose中的顺序,第一个可能的xsl:when条件只返回第一个。即。, 'matches(regex组(1),'

我有下面的XML代码

 <pgs>IVA.004, 168IA.002</pgs>
当我运行这个
IVA.004
时,它给我的输出是
,而不是
。请让我知道我哪里出了问题,我怎样才能解决这个问题。这是一把小提琴


谢谢

字符串
IVA.004
匹配
'V'
'IV'
,并且在
xsl:choose/xsl:when
中使用了第一个true
xsl:when
,因此您需要更改xsl:choose中
的顺序,第一个可能的xsl:when条件只返回第一个。即。,
'matches(regex组(1),'V')将首先返回,因为表达式包含'V',
我的意思是'IVA.004'包含'V',没有机会检查下一个xsl:when,因为条件成功后,控件将退出进一步的检查

更改xsl:when的顺序,如下所示

<xsl:when test="matches(regex-group(1),'IV') or ($nonStringFirstNum > 114 and $nonStringFirstNum &lt; 169)">
    <xsl:value-of select="concat('er:#Link_PT_04/P',regex-group(1),'-',regex-group(2))"/>
</xsl:when><!--Keep this xsl:when first-->
<xsl:when test="matches(regex-group(1),'V') or ($nonStringFirstNum > 168 and $nonStringFirstNum &lt; 297)">
    <xsl:value-of select="concat('er:#Link_PT_05/P',regex-group(1),'-',regex-group(2))"/>
</xsl:when><!--Keep this xsl:when next-->

再多几个xsl:when命令也需要更改,如下所示

<xsl:when test="matches(regex-group(1),'IX') or ($nonStringFirstNum > 323 and $nonStringFirstNum &lt; 326)">
    <xsl:value-of select="concat('er:#Link_PT_09/P',regex-group(1),'-',regex-group(2))"/>
</xsl:when>
<xsl:when test="matches(regex-group(1),'X') or ($nonStringFirstNum > 325 and $nonStringFirstNum &lt; 332)">
    <xsl:value-of select="concat('er:#Link_PT_10/P',regex-group(1),'-',regex-group(2))"/>
</xsl:when>

<xsl:when test="matches(regex-group(1),'IX') or ($nonStringFirstNum > 323 and $nonStringFirstNum &lt; 326)">
    <xsl:value-of select="concat('er:#Link_PT_09/P',regex-group(1),'-',regex-group(2))"/>
</xsl:when>
<xsl:when test="matches(regex-group(1),'X') or ($nonStringFirstNum > 325 and $nonStringFirstNum &lt; 332)">
    <xsl:value-of select="concat('er:#Link_PT_10/P',regex-group(1),'-',regex-group(2))"/>
</xsl:when>