Elemento <xsl:template>

Define una plantilla reutilizable para generar los resultados deseados para los nodos de un tipo y contexto en particular.

<xsl:template
  name= Qname
  match = Pattern
  priority = number
  mode = QName
</xsl:template>

Atributos

  • name
    El Nombres completos que se va a expandir. Si tiene un prefijo, el prefijo se expande en una referencia URI mediante las declaraciones de espacio de nombres activadas en el atributo en el que ocurre el nombre. El nombre expandido, consistente en la parte local del nombre y la referencia URI posiblemente nula se utiliza como nombre de la plantilla. El espacio de nombres predeterminado no se utiliza para nombres sin prefijo. Si un elemento <xsl:template> tiene un atributo name, también puede, pero no necesita, tener un atributo match.
  • match
    Modelos que identifica el nodo o nodos de origen a los que se aplica la regla. El atributo match es necesario a no ser que el elemento <xsl:template>tenga un atributo name. El contenido del elemento <xsl:template> es la plantilla de la que se crean instancias cuando se aplica la regla de plantilla.
  • priority
    El número de prioridad para la plantilla. Todas las reglas de plantilla coincidentes que tienen una prioridad más baja que la regla de plantilla coincidente con la prioridad más alta no se tienen en cuenta. El valor de ésta deberá ser un número real de 0-9, positivo o negativo, que coincida con el número de producción con un signo menos inicial opcional (-). La prioridad predeterminada se calcula de la siguiente forma:

    • Si el modelo contiene múltiples alternativas separadas por |, se trata de forma equivalente a un conjunto de reglas de plantilla, una para cada alternativa.

    • Si el modelo tiene la forma de un Qname precedido de un secundario o especificador de eje de atributo, o tiene la forma literal processing-instruction precedida por un secundario o especificador de eje atributo, la prioridad es 0.

    • Si el modelo es un nombre precedido de un secundario o especificador de eje de atributo, la prioridad es -0.25.

    • En caso contrario, si el modelo consiste en sólo una prueba de nodo precedida de un secundario o especificador de eje de atributo, la prioridad e -0.5.

    • En caso contrario, la prioridad es 0.5.

    Por tanto, el tipo más común de modelo (un modelo que prueba un nodo con un tipo en particular y un nombre expandido en particular) tiene prioridad 0. El siguiente tipo menos específico del modelo (un modelo que prueba un nodo con un tipo en particular y un nombre expandido con un espacio de nombres URI en particular) tiene prioridad -0.25. Los modelos menos específicos que éste (modelos que sólo prueban nodos con tipos en particular) tienen prioridad -0.5. Los modelos más específicos que el tipo mas común de modelo tienen prioridad 0.5.

  • mode
    Valor del modo. Este valor permite procesar un elemento varias veces, cada vez produciendo un resultado diferente. Si <xsl:template> no tiene un atributo match, no debe tener un atributo mode. Si un elemento <xsl:apply-templates> tiene un atributo mode, sólo se aplica a aquellas reglas de plantilla a partir de elementos <xsl:template> que tienen un atributo mode con el mismo valor; si un elemento <xsl:apply-templates> no tiene un atributo mode, sólo se aplica a aquellas reglas de plantilla a partir de elementos <xsl:template> que no tienen un atributo mode.

Información del elemento

Número de apariciones

Ilimitado

Elementos primarios

xsl:stylesheet, xsl:transform

Elementos secundarios

xsl:apply-imports,xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:number, xsl:param, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, elementos de salida

Comentarios

Tenga en cuenta que la plantilla no necesita generar un documento XML completo (incluso la plantilla raíz, a no ser mediante transformNodeToObject), pero sólo un fragmento de XML. Es posible incluir un texto no encerrado o múltiples elementos de documento definidos mediante una plantilla. Esto facilita la generación de texto sin formato y fragmentos XML que pueden procesarse aún más mediante una aplicación (por ejemplo, fragmentos HTML insertados en una página HTML).

El valor del atributo name es un QName que está expandido. Si tiene un prefijo, el prefijo se expande en una referencia URI mediante las declaraciones de espacio de nombres activadas en el atributo en el que ocurre el nombre. El nombre expandido, consistente en la parte local del nombre y la referencia URI posiblemente nula se utiliza como nombre de la plantilla. El espacio de nombres predeterminado no se utiliza para nombres sin prefijo.

Si un elemento <xsl:template> tiene un atributo name, también puede, pero no necesita, tener un atributo match. Un elemento <xsl:call-template> invoca una plantilla mediante el nombre; tiene un atributo name necesario que identifica la plantilla que se va a invocar. A no ser que <xsl:apply-templates>, <xsl:call-template> no cambie el nodo actual o la lista de nodos actuales.

Ocurrirá un error si una hoja de estilos contiene más de una plantilla con el mismo nombre.

Ejemplo

Esta regla de plantilla tiene un modelo que identifica elementos <stock> y produce un elemento <DIV> como resultado con el atributo STYLE="font-weight:bold":

Archivo XML (portfolio.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="templ.xsl"?>
<portfolio xmlns:dt="urn:schemas-microsoft-com:datatypes" xml:space="preserve">
  <stock exchange="nyse">
    <name>zacx corp</name>
    <symbol>ZCXM</symbol>
    <price dt:dt="number">28.875</price>
  </stock>
  <stock exchange="nasdaq">
    <name>zaffymat inc</name>
    <symbol>ZFFX</symbol>
    <price dt:dt="number">92.250</price>
  </stock>
  <stock exchange="nasdaq">
    <name>zysmergy inc</name>
    <symbol>ZYSZ</symbol>
    <price dt:dt="number">20.313</price>
  </stock>
</portfolio>

Archivo XSLT (templ.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="stock">
   <DIV STYLE="font-weight:bold">
      Symbol: <xsl:value-of select="symbol" />, 
      Price: <xsl:value-of select="price" />
   </DIV>
</xsl:template>

</xsl:stylesheet>

Resultados

Este es el resultado con formato:

Símbolo: ZCXM, Precio: 28.875

Símbolo: ZFFX, Precio: 92.250

Símbolo: ZYSZ, Precio: 20.313