В целом это невозможно, вам нужно научиться различать атрибуты, которые позволяют XPath expression
вычислять значение (например, select
из xsl:value-of
https://www.w3.org/TR/xslt-30/#value-of) и атрибуты, которые patterns
(например, match
из xsl:template
https://www.w3.org/TR/xslt-30/#defining-templates).
В XSLT 3, однако, есть одна новая опция так называемых теневых атрибутов https://www.w3.org/TR/xslt-30/#shadow-attributes вместе со статическими параметрами https://www.w3.org/TR/xslt-30/#static-params:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:param name="pattern1" as="xs:string" static="yes" select="'foo/bar'"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template _match="{$pattern1}"/>
</xsl:stylesheet>
https://xsltfiddle.liberty -development.net / jyH9rMM
Как видите, атрибут тени _match
имеет значение статического параметра.
Другой, более сложный подход, но также возможный в XSLT 3 и Saxon 9.8 для всех выпусков или других совместимых реализаций XSLT 3, при необходимости генерирует новую таблицу стилей и выполняет ее с помощью функции transform
https://www.w3.org/TR/xpath-functions/#func-transform. You необходимо создать код таблицы стилей в XSLT с другим пространством имен, которое можно псевдонимом в пространстве имен XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:axsl="http://www.w3.org/1999/XSL/Transform-Alias"
exclude-result-prefixes="#all"
version="3.0">
<xsl:param name="pattern1" as="xs:string" select="'foo/bar'"/>
<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>
<xsl:variable name="stylesheet">
<axsl:stylesheet version="3.0">
<axsl:mode on-no-match="shallow-copy"/>
<axsl:template match="{$pattern1}"/>
</axsl:stylesheet>
</xsl:variable>
<xsl:template match="/">
<xsl:sequence select="transform(
map {
'source-node' : .,
'stylesheet-node' : $stylesheet
}
)?output"/>
</xsl:template>
</xsl:stylesheet>
https://xsltfiddle.liberty -development.net / jyH9rMM / 2