И XSLT 1.0, и XSLT 2.0 не поддерживают динамическую оценку.
Один из способов сделать это - использовать <xsl:function>
в XSLT 2.0 или <xsl:call-template>
в XSLT 1.0 .
<xsl:function name="my:test" as="xs:boolean">
<xsl:param name="pNode" as="element()"/>
<xsl:variable name="vid" select="$pNode/@id"/>
<xsl:sequence select=
"$vid and not($vid=('_Name_','Group','_Count_')"/>
</xsl:function>
, тогда вы можете использовать эту функцию :
<xsl:apply-templates select="columnval[my:test(.)]"/>
Конечно, вы можете указатьтестируйте в определенных шаблонах соответствия, как это было предложено Робертом Россни , и это может быть лучшим способом.
В случае, если вам необходимо динамически определить, какую функцию фильтрации использовать, один мощный инструментбиблиотека FXSL , которая реализует функции высшего порядка (HOF) в XSLT.HOF - это функции, которые принимают другие функции в качестве параметров и могут возвращать функцию в качестве результата.
Используя этот подход, вы динамически определяете и передаете my:test()
в качестве параметра функцию, выполняющую тест.