Значение параметра на самом деле является узлом (текущим узлом), а не строкой, но вы правы, что (как и в большинстве языков) параметр содержит значение, а не фрагмент синтаксиса.Если вам действительно нужно передать строку (или, более часто, фрагмент xpath, извлеченный из источника), вам понадобится расширение динамической оценки, такое как аксон: оценивать, многие, но не все, продукты имеют такое расширение.Если требование простое (например, имя элемента), а не произвольный xpath, вы можете передать строку, например
<xsl:with-param name="paaram2" select="'foo'"/>
, затем использовать ее как
<xsl:value-of select="func:Lookup(*[name()=$param2])"/>
, которая пропустит элемент <foo/>
к функции.
Здесь, читая выражение изнутри
*
выбирает все дочерние элементы текущего узла
name()
, затем возвращаетимя этого элемента, поэтому
[name()=$param2]
верно только для тех дочерних элементов, имя которых указано в параметре, поэтому
*[name()=$param2]
выбирает элементы с именем, указанным параметром, и
func:Lookup(*[name()=$param2])
применяет функцию расширения к этим элементам.