如何在正则表达式元素匹配中使用 xsl 变量

How to use xsl varaible in regex element matches

我需要使用 XSL 变量和正则表达式模式进行验证。该变量保存两个元素文本的值。基本上验证是,如果 XSL 变量值(新的和 202)不存在于 url 中,则应该抛出错误消息。

XSL 文件

<xsl:variable name="XYZ" select="lower-case(//xyz/text())"/>
<xsl:variable name="BCD" select="lower-case(//bcd/text())"/>

<xsl:template match="//url[@url!='https://www.mvcf/journals/\*$XYZ*/2021/$BCD.']">
<xsl:message><xsl:value-of select="saxon:line-number()"/>:<xsl:value-of select="saxon:column-number()"/> the url aatribute does not contains xyz and bcd values </xsl:message>

</xsl:template>

输入Xml:

    <?xml version="1.0" encoding="utf-8"?>
    <test>sdfsdf<xyz>new</xyz><rey>#01</rey><bcd>202</bcd> </test>
<url url="https://www.mvcf/journals/ytre/2021/202.csv" />

Basically the validation is if the XSL variable values (new & 202) are not present in the url the error message should be thrown.

这可以通过以下方式在没有正则表达式的情况下完成:

<xsl:template match="url[not(contains(@url, $XYZ) and contains(@url, $BCD))]">

如果您想对 URL 的其他部分进行硬编码,则:

<xsl:template match="url[@url!=concat('https://www.mvcf/journals/', $XYZ, '/2021/', $BCD)]">

未测试,因为没有提供用于测试的代码。