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

xslt - visualizar - ¿Puede una plantilla XSL coincidir en los modos*TODOS*?



validaciones xsl (3)

¿Hay alguna forma de escribir una plantilla XSL 1.0 que coincida en todos los modos?

Sí, para hacer esto uno debe seguir estas dos reglas :

  1. Escribe tu plantilla sin un atributo de modo .

  2. Dentro de las plantillas modificadas tienen una instrucción <xsl:apply-templates> sin un atributo de modo que dará como resultado que la plantilla en 1. arriba se seleccione para el procesamiento

Esto sigue directamente de la especificación XSLT 1.0 , que dice :

Si un elemento xsl:apply-templates tiene un atributo de mode , entonces se aplica solo a las reglas de plantilla de xsl:template elementos de xsl:template que tienen un atributo de mode con el mismo valor; si un elemento xsl:apply-templates no tiene un atributo de mode , entonces se aplica solo a las reglas de plantilla de xsl:template elementos de xsl:template que no tienen un atributo de mode .

Para resumir : un conjunto de plantillas, cada una en un modo diferente, aún puede emitir <xsl:apply-templates> de tal manera (descrito anteriormente), de modo que se seleccionará la misma plantilla única específica para el procesamiento en cada caso.

¿Hay alguna manera de escribir una plantilla XSL 1.0 que coincida en todos los modos?

¿O tengo que escribir una plantilla separada para cada modo existente (incluidas las plantillas adicionales para los modos que se agreguen en el futuro)?

Esto es lo que tengo:

<xsl:apply-templates mode="mode1" /> ... <xsl:apply-templates mode="mode2" /> ... <!-- Do not process text content of nodes no matter in what mode --> <!-- Is there a way to have only one template here? --> <xsl:template match="text()" mode="mode1" /> <xsl:template match="text()" mode="mode2" />


El modo predefinido: #all (solo disponible en XSLT 2.0).

editar: replicar el comportamiento del modo compartido con 1.0

<xsl:template match="/"> <xsl:variable name="choice" select="''a''"/><!-- input seed here --> <xsl:choose> <xsl:when test="$choice=''a''"> <xsl:apply-templates mode="a"/> </xsl:when> <xsl:when test="$choice=''b''"> <xsl:apply-templates mode="b"/> </xsl:when> </xsl:choose> </xsl:template> <xsl:template match="*" mode="a"> [A] <xsl:apply-templates /> </xsl:template> <xsl:template match="*" mode="b"> [B] <xsl:apply-templates /> </xsl:template> <xsl:template match="text()"> [ALL] </xsl:template>


Si desea que la plantilla coincida en todos los modos, ¿por qué está utilizando el modo? Si no usa el modo, la plantilla se usará todo el tiempo. El motivo del modo es realizar de manera condicional cosas diferentes con el mismo tipo de datos. Parece que quieres ser no modal.