2008-12-11 17 views
6

Estoy tratando de incrustar un xsl en un archivo XML. La razón para hacer esto es crear un único archivo que se pueda mover a diferentes computadoras, esto evitaría la necesidad de mover el archivo xsl.Incrustar xsl en un archivo XML

El archivo xsl está creando una tabla y tomando un paso de prueba del xml y si pasó o no, bastante simple.
El problema que estoy teniendo, creo, es que el xsl tiene javascript y se muestra cuando el xml se carga en IE.

Cuando cargo el archivo xml con IE, el javascript se muestra sobre la tabla y debajo de la tabla se muestra el xml.

Así es como se pone de salida mi documento:

<!DOCTYPE doc [ 
<!ATTLIST xsl:stylesheet 
    id ID #REQUIRED> 
]> 

<doc>  

<xsl:stylesheet id="4.1.0" 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:user="http://www.ni.com/TestStand" 
    xmlns:vb_user="http://www.ni.com/TestStand/" > 

<xsl:template match="xsl:stylesheet" /> 
    <xsl:text disable-output-escaping="yes"> 

    <msxsl:script language="vbscript" implements-prefix="vb_user"> 
     option explicit 
     'This function will return the localized decimal point for a decimal number 
     Function GetLocalizedDecimalPoint() 
      dim lDecPoint 
      lDecPoint = Mid(CStr(1.1),2,1) 
      GetLocalizedDecimalPoint = lDecPoint 
     End Function 
    </msxsl:script> 
    <msxsl:script language="javascript" implements-prefix="user"><![CDATA[ 
     // This style sheet will not show tables instead of graphs for arrays of values if 
     // 1. TSGraph control is not installed on the machine 
     // 2. Using the stylesheet in windows XP SP2. Security settings prevent stylesheets from creatign the GraphControl using scripting. 
     //  Refer to the TestStand Readme for more information. 

//more javascript functions 
//code to build table and insert data from the xml 

</xsl:stylesheet> 

<Reports> 
<Report Type='UUT' Title='UUT Report' Link='-1-2008-12-3-10-46-52-713' UUTResult='Failed' StepCount='51'> 

// rest of xml 

</Report> 

</Reports> 
</doc> 

Respuesta

11

Although the W3C XSLT Spec supports embedding an XSLT stylesheet en un documento XML, parece que el IE y Firefox no apoyan esto.

ACTUALIZACIÓN: De acuerdo con el comentario de Robert Niestroj, años más tarde, en octubre de 2014, esto funciona en Firefox 33.

Sin embargo, hay una buena alternativa: incrustar el documento XML en el XSLT hoja de estilos.

A continuación se muestra un ejemplo.

Una hoja de estilo XSLT que contiene un documento XML incrustado:

 
<?xml-stylesheet type="text/xsl" href="myEmbedded.xml"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes"/> 
    <xsl:variable name="vEmbDoc"> 
     <doc> 
      <head></head> 
      <body> 
       <para id="foo">Hello I am foo</para> 
      </body> 
     </doc> 
    </xsl:variable> 
    <xsl:template match="para"> 
     <h1><xsl:value-of select="."/></h1> 
    </xsl:template> 
    <xsl:template match="xsl:template"/> 
</xsl:stylesheet> 

Cuando tis archivo se abre en Internet Explorer, el resultado deseado se visualiza por el navegador:

hola soy foo

Tenga en cuenta, que es necesario incluir plantillas que ignoran la mayoría de las instrucciones XSLT (en este caso ignoramos cualquier <xsl:template> simplemente por no tener cuerpo de plantilla.

+1

Nota importante para cuando está incrustando un documento en una hoja de estilos como esta: el nombre del archivo está codificado en la primera línea de la hoja de estilos. Eso significa que si cambia el nombre del archivo, el documento ya no se analizará. – Colen

+0

Funciona en Firefox 33. Controlado hoy. –

+0

@RobertNiestroj, gracias por esta información. Actualizado la respuesta. –

0

La incrustación de hojas de estilo es posible para la mayoría de los navegadores pero IE. Encuentra la referencia a una descripción y un ejemplo en la publicación a continuación.

IE6/7/8 no son compatibles con las hojas de estilo incrustadas de forma predeterminada.

Es posible que desee utilizar la solución que permite IE para procesar hojas de estilo incrustadas desde aquí:

http://www.biglist.com/lists/lists.mulberrytech.com/xsl-list/archives/201001/msg00390.html

0

Debido a su hoja de estilo hace uso de msxsl la técnica anterior para la hoja de estilo anabling de inclusión para los navegadores IE debe estar bien para tú.

Si desea incrustar hojas de estilo que funcione para todos los navegadores, es posible que desee utilizar la técnica support of stylesheet embedding for ALL browsers.

+0

¿Desea editar su respuesta anterior con esta información? Puedo hacer eso para usted. ¿Perdió su conexión a su cuenta anterior? Haga clic en el enlace "contáctenos" en la parte inferior de la página y cuéntele al equipo. –

Cuestiones relacionadas