等于虽然声明不匹配
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')
.
中的一个字符串
我有下面的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')
.