2013-02-14 2 views
2

Я хочу, чтобы динамически изменять режим применять-шаблоны на основе атрибутов исходного XML,, как это:XSLT режим Шаблон - оценка XPath

<xsl:choose> 
    <xsl:when test="@myAttribute"> 
     <xsl:apply-templates select="." mode="@myAttribute"/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:apply-templates select="." mode="someOtherMode"/> 
    </xsl:otherwise> 
</xsl:choose> 

Можно ли оценить XPath в атрибуте режиме? Есть ли другой подход?

Спасибо!

ответ

3

Нет, нет возможности использовать динамическое значение для атрибута mode. Он должен быть статичным. В вашем случае, я бы предложил сделать что-то вроде этого (используя имя MyNode как узел контекста для вашего примера выше):

<xsl:template match="myNode[@myAttribute = 'someValue']" mode="specialHandling"> 
    <!-- template contents --> 
</xsl:template> 

<xsl:template match="myNode[@myAttribute = 'someOtherValue']" mode="specialHandling"> 
    <!-- template contents --> 
</xsl:template> 

<xsl:template match="myNode[@myAttribute = 'aThirdValue']" mode="specialHandling"> 
    <!-- template contents --> 
</xsl:template> 

<xsl:template match="myNode[not(@myAttribute)]" mode="specialHandling"> 
    <!-- template contents --> 
</xsl:template> 

Тогда вам не нужно даже, что xsl:choose. Вы можете просто:

<xsl:apply-templates select="." mode="specialHandling" />