I had expected saxon:evaluate() to be simple but it has me stumped.
You need to keep a clear head about what's going on.
<xsl:template match="/">
<xsl:variable name="test" select="/test/input/text()"/>
<xsl:value-of select="$test"/>
<xsl:if test="$test != ''">
<xsl:variable name="output"
select="saxon:evaluate('/test/$test/text()')"/>
At stylesheet execution time you need to construct an XPath expression in
which the value of your $test variable has been substituted. This expression
isn't going to be constructed by magic. You need
saxon:evaluate(concat('/test/', $test, '/text()'))
Michael Kay