Вы можете сделать это даже в XSLT 1.0 (как одно выражение XPath 1.0) без регулярных выражений :
substring(substring(normalize-space(substring-before(.,' fail')), 2),
1,
string-length(substring(
normalize-space(substring-before(.,' fail')),
2)
) -1
)
Поскольку ваша цель состоит в том, чтобы сделать это в XSLT, вы можете определить переменные для компонентов этого сложного выражения и получить простой и понятный код:
<xsl:template match="/">
<xsl:variable name="vStart" select=
"normalize-space(substring-before(.,' fail'))"/>
<xsl:variable name="vnormString" select=
"normalize-space($vStart)"/>
<xsl:variable name="vLen" select="string-length($vnormString)"/>
"<xsl:value-of select="substring($vnormString, 2, $vLen -2)"/>"
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к следующему документу XML:
<t>[[2500, 4500]] fail(expected [[2100, 3000, 4000, 5000, 5400, 6000, 8000, 10000]]) </t>
желаемый, правильный результат получается:
"[2500, 4500]"
Пояснение : Использование стандартных функций XPath 1.0: substring()
, substring-before()
, normalize-space()
и string-length()