XSLT转换中的正则表达式?

时间:2017-07-14 11:44:09

标签: xml xslt

我需要使用XSLT 2.0从XML字段中提取一些数据,我不知道最好的方法。 这是我的XML值:

<PayReaCom>AP@1267347323/11122/01/2017/REF1AP@</PayReaCom>

我需要AP@AP@之间的所有内容;所以在这种情况下:

1267347323/11122/01/2017/REF1

我尝试使用substring,但我不知道如何为AP@设置限制。

我可以在这里使用正则表达式吗?

3 个答案:

答案 0 :(得分:2)

假设PayReaCom元素是上下文节点,则打印所需的元素 片段,你可以使用:

<xsl:value-of select="substring-before(substring-after(., 'AP@'), 'AP@')"/>

首先substring-after功能&#34;切断&#34;最初的AP@(无论如何 之前)。 然后该函数的结果由substring-before函数处理, &#34;切断&#34; AP@的第二个实例(以及之后的任何内容)。

或者,如果要将此子字符串保存在变量中,请使用:

<xsl:variable name="yourName" .../>

使用上面的select子句。

答案 1 :(得分:1)

在XSLT 2.0中,您可以简单地执行:

tokenize($string, 'AP@')[2]

返回AP@分隔符的第一次和第二次出现之间的字符串。

例如,给定:

<PayReaCom>alphaAP@bravoAP@charlie</PayReaCom>

指令:

<xsl:value-of select="tokenize(PayReaCom, 'AP@')[2]" />

将返回:

bravo

答案 2 :(得分:0)

xsl:analyze-string

<xsl:analyze-string select="PayReaCom" regex="AP@(.+?)AP@">
  <xsl:matching-substring>
    <!-- Replacement here -->
  </xsl:matching-substring>
</xsl:analyze-string>

请参阅:https://www.w3.org/TR/xslt20/#analyze-string

您可能希望将此功能与功能结合使用:regex-group

另请参阅:https://www.w3.org/TR/xslt20/#function-regex-group