2013-07-31 2 views
0

Я хотел бы узнать, можно ли отправить <xsl:template> в XSLT (2.0) на основе значения атрибута. Давайте предположим, что следующий пример XML:Отправка шаблона в XSLT на основе значения атрибута

<root> 
    <field code="a">Content A</field> 
    <field code="b">Content B</field> 
</root> 

Я хочу написать селектор XPath для <xsl:template>match атрибута, который будет разослать обработку шаблонов, определенных для каждого значения данного атрибута. На ï ве подход может сравнить значение атрибута в каждом шаблоне:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0"> 

    <xsl:template match="/root"> 
     <xsl:apply-templates select="field"/>  
    </xsl:template> 

    <xsl:template match="field[@code = 'a']"> 
     Code A processing... 
    </xsl:template> 

    <xsl:template match="field[@code = 'b']"> 
     Code B processing... 
    </xsl:template> 

</xsl:stylesheet> 

Кроме того, можно было бы использовать <xsl:choose> и <xsl:when> для каждого возможного значения кода, в котором можно было бы использовать <xsl:call-template/>, вызов, посвященный имени шаблона.

Есть ли лучшее решение для отправки шаблонов на основе значения атрибута?

+0

Избегайте '' в пользу соответствия шаблонов, если вы можете (иногда вы не можете, например, при тестировании на переменные или значения параметров). – Tomalak

+0

Точно. Мой предпочтительный способ, безусловно, с помощью сопоставления с шаблонами. –

ответ

2

Ваш код действителен как в XSLT 1.0, так и в 2.0, и это также хорошая практика. В чем проблема?

+0

Я думал, что может быть способ непосредственного соответствия значению атрибута и, таким образом, избежать повторения с полем [@code = 'dispatch value'] '. –

+0

@jindrichm, вы можете совместить, например. 'Поле/@ код [. = 'b'] '. Но обычно имеет смысл только в том случае, если вы хотите преобразовать этот атрибут в другой или, по крайней мере, просто вывести его значение. Если преобразование или вывод для 'поля' отличается в зависимости от атрибута, то обычно легче обрабатывать разницу в шаблоне, соответствующем элементу. –

Смежные вопросы