等于虽然声明不匹配

equals not matching though declared

我有下面的XML文字

S1/7/1

以及下面的 XSLT。

<xsl:template match="text()">

                <xsl:analyze-string select="." regex="(\w+)/(\w+)/(\w+)">
                    <xsl:matching-substring>
                        <xsl:variable name="ChpnMatch">
                            <xsl:value-of select="substring(regex-group(1),1,1)"/>
                        </xsl:variable>
                        <xsl:variable name="regex1">
                            <xsl:choose>
                                <xsl:when test="$ChpnMatch = 'U'">
                                    <xsl:text>HKWB2015EDSUPP2_CH_S4</xsl:text>
                                </xsl:when>
                                <xsl:when test="$ChpnMatch = 'B|D|E|L|R|F|H|K|Q|S'">
                                    <xsl:text>HKWB2015EDSUPP2_CH_S3</xsl:text>
                                </xsl:when>
                                <xsl:otherwise>
                                    <xsl:text>HKWB2015EDSUPP2_CH_S1</xsl:text>
                                </xsl:otherwise>
                            </xsl:choose>
                        </xsl:variable>
                        <a href="{concat('er:#',$regex1,'/P',regex-group(1),'-',regex-group(2),'-',regex-group(3))}">
                            <xsl:value-of select="."/>
                        </a>
                    </xsl:matching-substring>

                            <xsl:non-matching-substring>
                                <xsl:value-of select="."/>
                            </xsl:non-matching-substring>
                        </xsl:analyze-string>

    </xsl:template>

这里有一种情况<xsl:when test="$ChpnMatch = 'B|D|E|L|R|F|H|K|Q|S'">,就是实际匹配结果应该是HKWB2015EDSUPP2_CH_S3,但是抓到的结果是HKWB2015EDSUPP2_CH_S1(也就是otherwise block).你能告诉我我哪里出错了以及如何解决这个问题吗?

这里是Working Demo

谢谢

如果你想将一个字符串与一系列其他字符串进行比较,那么你需要例如'S' = ('A', 'B', 'D', 'S') 所以我认为你想要 xsl:when test="$ChpnMatch = ('B', 'D', 'E', 'L', 'R', 'F', 'H', 'K', 'Q', 'S')" 而不是 xsl:when test="$ChpnMatch = 'B|D|E|L|R|F|H|K|Q|S'"。检查 $ChpnMatch 是否至少等于序列 ('B', 'D', 'E', 'L', 'R', 'F', 'H', 'K', 'Q', 'S').

中的一个字符串