0

我正在使用 XSLT 2.0 并尝试提取所需的字符正则表达式。

我用 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>

是否有任何功能可以获取您需要的字符,而不需要“如果”?谢谢。

编辑

我想我会就这样离开它。

<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>

但是如果有更好的方法来做到这一点。谢谢你。

4

2 回答 2

4

You can use replace, to replace everything with the part you need.

In XPath 2:

replace(x:td/x:p, '^.*([0-9])d$', '$1')

In XSL:

<xsl:value-of select="replace(x:td/x:p, '^.*([0-9])d$', '$1')" /> 
于 2013-05-07T15:37:19.467 回答
0

您可以这样做,tokenize()但首先将令牌收集到变量中。

<xsl:variable name="tokens" select="tokenize(x:td/x:p,'-')"/>

然后选择最后一个标记并用于substring()获取数字。

<xsl:value-of select="substring(item-at($tokens, 3), 1, 1)" />
于 2013-05-07T15:40:42.130 回答