xsl visualizar ver validaciones template programacion plantillas generar ejemplos ejemplo como codigo archivo xslt precedence

xslt - visualizar - Prioridad de la plantilla XSL



ver archivo xsl (1)

El proceso de resolución completa se describe en la sección 5.5 de la especificación XSLT .

En general, las siguientes reglas se aplican en orden (por ejemplo, una plantilla eliminada de la consideración debido a una menor prioridad de importación se elimina permanentemente, independientemente de su prioridad):

  1. Las plantillas importadas tienen menor prioridad que las plantillas en la hoja de estilo primaria
  2. Las plantillas con un valor más alto en su atributo de priority tienen mayor prioridad
  3. A las plantillas sin atributo de priority les asigna una prioridad predeterminada. Las plantillas con patrones más específicos tienen prioridad.
  4. Es un error si los tres pasos anteriores dejan más de una plantilla en consideración, pero los procesadores XSLT pueden recuperarse de manera predeterminada al último en el archivo.

En su caso específico, ambas plantillas tienen la misma prioridad, por lo que se aplica el número 4 anterior. Demostrar:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match= "vehicle_details[preceding-sibling::vehicle_type = ''4x4'']/*"> template1 </xsl:template> <xsl:template match="vehicle_details[descendant::color = ''red'']/*"> template2 </xsl:template> </xsl:stylesheet>

Aplicado a esta entrada (ambas plantillas coinciden):

<root> <vehicle_type>4x4</vehicle_type> <vehicle_details> <color>red</color> </vehicle_details> </root>

Salida:

template2

Pero si cambiamos el orden de las plantillas:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="vehicle_details[descendant::color = ''red'']/*"> template2 </xsl:template> <xsl:template match= "vehicle_details[preceding-sibling::vehicle_type = ''4x4'']/*"> template1 </xsl:template> </xsl:stylesheet>

Entonces la salida es:

template1

Tengo 2 plantillas

<template match="vehicle_details[preceding-sibling::vehicle_type = ''4x4'']/*"> ... </xsl:template> <xsl:template match="vehicle_details[descendant::color = ''red'']/*" > ... </xsl:template>

Mi pregunta es: qué plantilla tendrá prioridad en la transformación. ¿Y alguien puede darme una descripción general / recursos sobre la prioridad de la plantilla XSL?

¡Gracias por adelantado!