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):
- Las plantillas importadas tienen menor prioridad que las plantillas en la hoja de estilo primaria
- Las plantillas con un valor más alto en su atributo de
priority
tienen mayor prioridad - A las plantillas sin atributo de
priority
les asigna una prioridad predeterminada. Las plantillas con patrones más específicos tienen prioridad. - 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!