xsl tutorial transformar mapeo for espaƱol ejemplo curso xslt

tutorial - Combinar varias hojas de estilo xslt



xsl:for-each (5)

Tengo una hoja de estilo xslt con múltiples xsl:import s y quiero fusionarlos todos en el único archivo xslt.

Es una limitación del sistema que estamos usando cuando pasa alrededor de la hoja de estilos xsl como un objeto de cadena almacenado en la memoria. Esto se transmite a la máquina remota donde realiza la transformación. Como no se está cargando desde el disco, los enlaces href están rotos, por lo que debemos eliminar xsl:import s de la hoja de estilo.

¿Hay alguna herramienta que pueda hacer esto?


¿Por qué querrías? Generalmente están separados por una razón después de todo (a menudo mantenibilidad)

Siempre puede escribir la fusión usted mismo: lea los archivos XSL, seleccione los elementos de la plantilla que le interesan y escriba en un nuevo archivo maestro XSL ...


Es imposible incluir hojas de estilo importadas en el archivo principal sin romper la prioridad de importación . Por ejemplo, define una variable de nivel superior en una hoja de estilo importada y la redefine en el archivo principal. Si fusiona dos archivos en uno, obtendrá dos variables con el mismo nombre e importancia de importación, lo que dará como resultado un error.

La solución alternativa es reemplazar dos xsl: import con xsl: include y resolver cualquier conflicto . Después de eso, puede reemplazar xsl: incluya instrucciones con los contenidos de los archivos correspondientes, porque eso es lo que hace el procesador XSLT :

La inclusión funciona en el nivel de árbol XML. El recurso ubicado por el valor del atributo href se analiza como un documento XML, y los elementos secundarios del elemento xsl: stylesheet en este documento reemplazan el elemento xsl: include en el documento incluido. El hecho de que se incluyan reglas o definiciones de plantilla no afecta la forma en que se procesan.


Puede usar una hoja de estilos XSL para combinar sus hojas de estilo. Sin embargo, esto es equivalente a usar el elemento xsl: include, no xsl: import (como Azat Razetdinov ya ha señalado). Puede leer sobre la diferencia aquí .

Por lo tanto, primero debe reemplazar el xsl: import con xsl: include, resolver cualquier conflicto y probar si aún obtiene los resultados correctos. Después de eso, puede usar la siguiente hoja de estilo para fusionar sus hojas de estilo existentes en una sola. Simplemente aplícalo a tu hoja de estilo maestra:

<?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="xsl:include"> <xsl:copy-of select="document(@href)/xsl:stylesheet/*"/> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>

La primera plantilla reemplaza todas las xsl: include con las hojas de estilo incluidas al usar la función de documento, que se lee en el archivo al que se hace referencia en el atributo href. La segunda plantilla es la transformación de identidad .

Lo probé con Xalan y parece funcionar bien.


Una fusión manual probablemente sea la mejor opción.

La consideración principal probablemente sea asegurarse de que la lógica para emparejar plantillas funcione en la hoja de estilos combinada.


import multiple xsl in single xsl <xsl:import href="FpML_FXOption_Trade_Template1.xsl"/> <xsl:apply-imports/> <calypso:keyword> <calypso:name>DisplayOptionStyle</calypso:name> <calypso:value>Vanilla</calypso:value> </calypso:keyword> <xsl:import href="FpML_FXOption_Trade_Template2.xsl"/> <xsl:apply-imports/>