我正在使用XSLT 2.0并试图提取所需的caracterer正则表达式。
我用tokenize()试了一下,但更令人费解。
<xsl:value-of select="tokenize('2.0-Cloverleaf-3d', '-')" />
结果是: 2.0 ,结果应该是: 3 。字符串是(2.0-Cloverleaf - * 3 * d)。
我更喜欢这样做:
<xsl:if test="matches(x:td/x:p, '.+3d$')">
true
</xsl:if>
是否有任何功能可以获得您需要的角色,而无需“if”?感谢。
修改
我想我会这样离开。
<xsl:variable name="places">
<xsl:if test="matches(x:td/x:p, '.+3d$')">3</xsl:if>
<xsl:if test="matches(x:td/x:p, '.+4d$')">4</xsl:if>
<xsl:if test="matches(x:td/x:p, '.+5d$')">5</xsl:if>
</xsl:variable>
但如果有更好的方法可以做到这一点。谢谢。
答案 0 :(得分:4)
您可以使用替换,用您需要的部件替换所有部件。
在XPath 2中:
replace(x:td/x:p, '^.*([0-9])d$', '$1')
在XSL中:
<xsl:value-of select="replace(x:td/x:p, '^.*([0-9])d$', '$1')" />
答案 1 :(得分:0)
您可以使用tokenize()
执行此操作,但首先将令牌收集到变量中。
<xsl:variable name="tokens" select="tokenize(x:td/x:p,'-')"/>
然后选择最后一个标记并使用substring()
来获取数字。
<xsl:value-of select="substring(item-at($tokens, 3), 1, 1)" />