В XSLT-1.0 нельзя использовать переменную в выражении, соответствующем шаблону.
Это просто не работает, поэтому либо жестко закодируйте значение, либо поместите его в xsl:if
или xsl:choose
.
То есть
<xsl:template match="/books/book">
<xsl:if test="contains(author/text(),$value)">
CONDITION Fulfilled!
</xsl:if>
</xsl:template>
работает, но использование его в качестве предиката
<xsl:template match="/books/book[contains(author/text(),$value)]">
CONDITION won't work!
</xsl:template>
не сработает, если вы не закодируете соответствующее ЗНАЧЕНИЕ как
<xsl:template match="/books/book[contains(author/text(),'VALUE')]">
CONDITION won't work!
</xsl:template>