2009-02-10 10 views
8

Básicamente quiero tener un xslt para convertirme en mi xslt 'base' y quiero vincular esto en archivos xslt secundarios.¿Puedo vincular xslt a otro xslt?

¿Esto es posible?

El objetivo es reducir la duplicación de código.

Tendremos muchos archivos xslt secundarios para los distintos clientes, todos con su propio formato y texto adicional, etc., y no queremos repetir el código base para cada cliente xslt.

Sé que podemos formatear según el tipo de cliente, pero esto hará que el xslt esté desordenado. Lo ideal sería simplemente como el código relacionado con el cliente para cada cliente.

¿No es esta la manera de hacer xslt? ¡Soy nuevo en xslt!

Respuesta

14
<xsl:import href="library/utility-include.xsl" /> 

La ruta href es relativa al archivo xsl actual. <xsl:import/> documentation.

Recuerde que debe escribir sus líneas de importación como el primer elemento secundario de <xsl:stylesheet> o <xsl:transform>. No pueden aparecer en todos tus archivos.

10

Como han especificado todas las otras respuestas, hay dos instrucciones XSLT:

<xsl:import>

y

<xsl:include>

que fueron diseñados precisamente para proporcionar esta capacidad .

Puede ser de interés para usted que haya bibliotecas completas de plantillas y funciones que importan internamente otras hojas de estilo de la biblioteca. Las hojas de estilo de la biblioteca están destinadas a ser importadas en las hojas de estilo XSLT del usuario.

Por ejemplo, eche un vistazo a FXSL library para la programación funcional en XSLT.

4

Todas las demás respuestas que dan información suficiente,
quiero mencionar una cosa más importante aquí .. Usted puede incluso "pasar el (en ambos sentidos) parámetros" entre los dos (llamante y llamado archivo, si necesitan compartir cualquier dato) archivos xslt ..
Esta función desempeña un papel importante en/más allá de la versión 1.0 de XSLT, puede necesitarla en el futuro ..
:)

0

Sí, puede utilizar la etiqueta para tirar en un XSLT diferente:

<xsl:include href="OtherTemplate.xslt" /> 

Hay algunas trampas! ¡Así que ten cuidado!

El XSLT "principal" guardará en caché el XSLT incluido. Por lo tanto, si realiza un cambio en el XSLT anidado/incluido, no aparecerá de inmediato en la transformación principal XSLT. "Creo" que esto podría tener que ver con el uso de XslCompiledTransform, pero no con el 100% de eso. De todos modos, si modifica el XSLT padre, actualizará el caché. (Este ha sido un problema muy molesto en algunos proyectos)

En segundo lugar, es probable que encuentre problemas con el parámetro $ currentPage. Solo se puede declarar una vez en toda la hoja de estilo XSLT, ¡eso incluye cualquier "incluye"! ¡Así que ten cuidado cuando hagas referencia al elemento! referencia de here