2011-12-23 77 views
10

Estoy trabajando en un sitio antiguo que usa java y xsl. ¿Cómo puedo inculcar un archivo de script en un archivo xsl? Parte superior del archivo:cómo incluir una etiqueta de script en un archivo xsl?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:include href="shipmentPackageInfo.xsl"/> 

<script src="/fs/scripts/shipment/shipment.js"></script> 

rompe la App

- ACTUALIZACIÓN -

Hay otro archivo llamado pageHeader.xsl que tiene todas las etiquetas de script dentro de

<xsl:output method="html"/> 
    <xsl:template match="PageHeaderData"> 

Respuesta

9

Parece que hay una solución aquí:

http://www.webdeveloper.com/forum/archive/index.php/t-20815.html

Put código javascript entre <xsl:text> etiqueta de algo, como a continuación

<script type="text/javascript"> 

<xsl:text> 

javascript here 

</xsl:text> 

</script> 
+0

simple y útil, agregue un signo de comillas dobles al final del type = "text/javascript –

+0

@contam tal vez debería sugerir que al miembro del foro que publicó esto, ya que esta es una cita directa de ellos;) – annonymously

+0

tienes razón ... Tengo que investigar si el código fuente del foro está pegado de otro foro :-) –

2

debe insertar la etiqueta script dentro de un bloque de plantilla o se romperá ...

es decir

<xsl:template match="/"> 
    <script src="/fs/scripts/shipment/shipment.js"></script> 
</xsl:template> 
+0

Gracias Treemonkey. Intenté su solución, pero todavía br eaks. ¿Necesito tener la secuencia de comandos dentro de ? Sin embargo, solo puede tener un método de salida por página? –

+0

Así que supongo que podría agregar la secuencia de comandos al archivo de encabezado de página principal y envolverlo en una coincidencia para que la secuencia de comandos solo se cargue cuando se satisfaga esa coincidencia? –

0

EDITADO

Su e es una solución que funciona

Suponiendo que este es su xsl y está incluyendo xsl como mencionó. En este caso lo llamé include.xsl. Solo llamo a una plantilla llamada encabezados que extrae la referencia javascript.

XSLT principal del archivo:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 
    <xsl:include href="include.xsl"/> 

    <xsl:template match="/"> 
     <xsl:call-template name="headers"/> 
     <bar> 
      <xsl:value-of select="root"/> 
     </bar> 
    </xsl:template> 
</xsl:stylesheet> 

include.xsl

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 
    <xsl:template name="headers"> 
     <script src="/fs/scripts/shipment/shipment.js"></script> 
    </xsl:template> 
</xsl:stylesheet> 

Salida:

<?xml version="1.0" encoding="utf-8"?> 
<script src="/fs/scripts/shipment/shipment.js"/> 
<bar>foo</bar> 
+0

Gracias. Eso acaba de imprimir como una cadena en la pantalla –

+0

Editado y un código diferente, lo he probado y funciona. Básicamente, puede llamar a una plantilla que tiene este o un conjunto de javascripts –

+1

Usando CDATA, lo he probado, también puede hacer ']]> 'esto lo generará en el archivo –

8

Tome un vistazo a mi respuesta a XSLT wont allow me to use self-closing img and br tags

etiquetas script de cierre automático (<script src="code.js"/>) puede hacer que los archivos de JavaScript no se carguen, por lo tanto, dentro de su XSLT, es posible que necesite tener algún texto dentro de la etiqueta de secuencia de comandos para evitar que se cierre automáticamente y hacer que funcione.

<script src="code.js>//</script> 
0
<script type="text/javascript" src="/Scripts/script.js"> 
    <xsl:comment>script</xsl:comment> 
</script> 
5

Oh, me gusta esto:

... ... 
     </body> 
<script language="javascript"><![CDATA[ 
var a_patch = function(){ 
    var links = document.getElementsByTagName("a"); 
    for (var i=0; i<links.length; i++){ 
     var link = links[i]; 
     var text = link.innerHTML; 
     ... ... 
    } 
}; 
a_patch(); 
]]></script> 
</html> 
Cuestiones relacionadas