Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este ejemplo utiliza <xsl:apply-imports> para aprovechar el código de manera más efectiva.El ejemplo utiliza cuatro archivos principales:
El archivo XML de origen, ops.xml. Este archivo de datos define tres operaciones:
add(+),sub(-) ymul(*).La hoja de estilos XSLT principal, ops.xsl. Este archivo contiene las reglas de plantilla para las operaciones, incluidos dos elementos
<xsl:import>. Las hojas de estilos importadas realizan operaciones aritméticas y de cadena en una fuente de datos determinada.Una hoja de estilos importada, arith.xsl. Este archivo XSLT realiza operaciones aritméticas en cada elemento
<op>.Otra hoja de estilos importada, str.xsl. Este archivo XSLT realiza operaciones de cadena personalizadas. Aquí
add(+) se trata como una sucesión de cadenas; por ejemplo,1+2se convierte en12. Del mismo modo,mul(*) se trata como una sucesión inversa; 1*2 se convierte en 21. Recuerde quesub(-) es una operación de cadena indefinida.
Archivo XML (ops.xml)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="ops.xsl"?>
<ops>
<desc>Some binary operations</desc>
<op name="add" symbol="+">
<operand>1</operand>
<operand>2</operand>
</op>
<op name="sub" symbol="-">
<operand>1</operand>
<operand>2</operand>
</op>
<op name="mul" symbol="*">
<operand>1</operand>
<operand>2</operand>
</op>
</ops>
Archivo XSLT principal (ops.xsl)
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="arith.xsl"/>
<xsl:import href="str.xsl"/>
<xsl:template match="op">
<xsl:value-of select="operand[1]"/>
<xsl:value-of select="@symbol"/>
<xsl:value-of select="operand[2]"/>
= <xsl:apply-imports/>
<br/>
</xsl:template>
</xsl:stylesheet>
Archivo XSLT importado (arith.xsl)
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="op[@symbol='+']">
<xsl:value-of select="sum(operand)"/> (from arith.xsl)
</xsl:template>
<xsl:template match="op[@symbol='-']">
<xsl:value-of select="number(operand[1])-number(operand[2])"/>
(from arith.xsl)
</xsl:template>
<xsl:template match="op[@symbol='*']">
<xsl:value-of select="number(operand[1])*number(operand[2])"/>
(from arith.xsl)
</xsl:template>
</xsl:stylesheet>
Archivo XSLT importado (str.xsl)
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="desc">
<DIV><xsl:value-of select="."/></DIV>
</xsl:template>
<xsl:template match="op[@name='add']">
<xsl:value-of select="operand[1]"/>
<xsl:value-of select="operand[2]"/> (from str.xsl)
</xsl:template>
<xsl:template match="op[@name='mul']">
<xsl:value-of select="operand[2]"/>
<xsl:value-of select="operand[1]"/> (from str.xsl)
</xsl:template>
</xsl:stylesheet>
Resultados
Obtendrá los siguientes resultados:
Some binary operations
1+2 = 12 (from str.xsl)
1-2 = -1 (from arith.xsl)
1*2 = 21 (from str.xsl)
Comentarios
La última hoja de estilos importada tiene la prioridad de importación más alta. En este ejemplo, str.xsl se importa en último lugar y, por tanto, tiene una mayor prioridad de importación que arith.xsl. Las dos hojas de estilos importadas tienen plantillas para las operaciones add y mul. Sólo se llamarán las de str.xsl. La operación sub definida en arith.xsl se utiliza, sin embargo, porque no se define ninguna operación secundaria en str.xsl. Supongamos que se invierte el orden de los elementos <xsl:import> del archivo XSLT principal, de la siguiente forma:
<xsl:import href="str.xsl"/>
<xsl:import href="arith.xsl"/>
En este caso, el resultado sería el siguiente:
Some binary operations
1+2 = 3 (from arith.xsl)
1-2 = -1 (from arith.xsl)
1*2 = 2 (from arith.xsl)
Además, si la instrucción <xsl:apply-imports/> no está definida en la regla de la plantilla de invalidación para <op> en el archivo XSLT principal (ops.xsl), el resultado será el siguiente:
Some binary operations
1+2 =
1-2 =
1*2 =
Es decir, la regla de plantilla de la hoja de estilos que se está importando invalida las reglas de plantilla relacionadas de las hojas de estilos importadas. La instrucción <xsl:apply-imports/> le permite volver a activar estas reglas de plantilla invalidadas de un modo diferente.