Mis 2 peniques por valor en una alternativa simple (pero efectivo) (sólo psuedocode proporcionan para ilustración de proceder con cautela :)
Esquema del enfoque:. Una solución alternativa puede consistir en un simple script envoltorio (por ejemplo, shell, bash script u otro) para invocar a su xsl principal, uso de los modos xslt de nombre, el archivo xslt principal, un archivo xslt especificado de forma estática (en blanco).
En la xsl principal, incluya un archivo xsl estático, que invocará/cargará todo el xslt incluido dinámicamente. El xsl principal operará en 2 modos: el modo normal (modo no especificado), donde cargará los archivos de extensión xsl incluidos en sí mismo, y en los archivos xls estáticos, y procesará los archivos de entrada, o hará lo que sea bueno para su propósito. hacer. El segundo modo, modo de preprocesador, estará destinado a cargar las instancias/archivos xsl especificados dinámicamente. Este modo se invocará como una etapa de preprocesador para la ejecución de procesamiento principal. El flujo de proceso para el xslt principal sería llamarlo con el modo de preprocesador especificado, y luego volver a llamarlo con el modo de procesamiento normal indicado.
Indicaciones de implementación: Para cada xlator defina una extensión n archivo xslt, ext_xsl_container, cuyo propósito es incluir cualquier extensión xslt. por ejemplo, hoja de estilo
<xsl:stylesheet >
<!-- main xslt -->
<xsl:import href="../xsl/ext_xsl_container.xsl/>
<!--param: list of dynamically specified extension xsl -->
<xsl:param name="extXslUrlList"/>
<!--param:preprocessor mode flag, with default set to false -->
<xsl:param name="preProcModeLoadXslF" select="false()" type="xs:boolean"
<!-- param: path to the staticall included ext_xsl_container: with default value set -->
<xsl:param name="extXslContainerUrl" select="'../xsl/ext_xsl_container.xsl'"/>
<xsl:if test=" ($preProcModeLoadXslF=true())" >
<xsl:call-template name="loadDynamicXsl" mode="preprocess_load_xsl"
</xsl:if>
....
</xsl:stylesheet>
El ext_xslt_container incluirá cualquier XSLT de extensión. Se puede actualizar dinámicamente en tiempo de ejecución editándolo (como un documento xml) y agregando una instrucción include para la extensión xsl stylesheets. por ejemplo
<!-- ext xsl container : ext_xsl_container.xsl-->
<xsl:stylesheet
<xsl:include href="ext_xsl_container.xsl"/>
....
</xsl:stylesheet
Crear una plantilla pequeña, digamos template_load_ext_xsl, con un modo asignado, por ejemplo mode = "preprocess_load_xsl" por ejemplo
<xsl:template name="loadDynamicXsl" mode="preprocess_load_xsl">
<!-- param: path to the staticall included ext_xsl_container-->
<xsl:param name="extXslContainerUrl"/>
<!--param: list of dynamically specified extension xsl -->
<xsl:param name="extXslUrlList"/>
<!-- step 1, [optional ] open the ext Xsl container file -->
<!-- step 2 [optional] clear contexts of the ext X -- >
<!-- step3 compile a list of include elements, one per each ext Xsl file -->
<!-- step 4 [optional] create a union of the include elements created with the content of the xsl container file : ie append content >
<!-- step 5 : write the union list of incudes to the ext XSL container file -->
<!-- DONE --->
</xsl:template>
La plantilla tomará como argumentos, el nombre de la ex_xsl_container, y una lista de archivos xsl de extensión (incluyendo sus rutas) , luego abrirá el archivo ext_xsl_container como un documento xml, agregará (opciones para agregar, o borrará archivos y agregará código nuevo) instrucciones para cada extensión: xsl, guarde el archivo y salida
siguiente cuando se ejecuta el XSL principal en el modo de ejecución normal, que willl incluye el loadDynamicXsl plantilla, que inturn incluirá los archivos de extensión de XSLT specifed en tiempo de ejecución
Crear un script sencillo envoltorio (por ejemplo, golpe o shell script) que incluirá argumentos en el xslt principal y una opción para ejecutar el modo de preprocesador. La secuencia de comandos simplemente llamará a la xslt principal dos veces, si la opción para el modo de preprocesador está habilitada y habilitando el modo de preprocesador en la primera ejecución, seguido de una segunda llamada en modo normal
use –
bvb1909