我需要使用XSLT 2.0从XML字段中提取一些数据,我不知道最好的方法。 这是我的XML值:
<PayReaCom>AP@1267347323/11122/01/2017/REF1AP@</PayReaCom>
我需要AP@
和AP@
之间的所有内容;所以在这种情况下:
1267347323/11122/01/2017/REF1
我尝试使用substring
,但我不知道如何为AP@
设置限制。
我可以在这里使用正则表达式吗?
答案 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
。