xsl:import and xsl:include in stylesheets don't work on Google Chrome xsl:import and xsl:include in stylesheets don't work on Google Chrome google-chrome google-chrome

xsl:import and xsl:include in stylesheets don't work on Google Chrome


I'd do something like the following, which will combine the stylesheet serverside, before it gets to Chrome. The first step is in place because xsl:import is not the same as replacing all places with the imported stylesheets.

  1. Replace all xsl:import with xsl:include (import priority isn't applicable to xsl:include, so you may need to change your code and use priorities instead)
  2. Use the server-side stylesheet below to merge them into one before serving
  3. Wait a few weeks (can be months). I've created a fix for Chrome and am currently working with the developers team to include the fix into the build.
<xsl:template match="node()">    <xsl:copy>       <xsl:copy-of select="@*"/>       <xsl:apply-templates select="node()"/>    </xsl:copy></xsl:template><xsl:template match="xsl:include">   <!-- you'll probably want to be a bit more restrictive here -->   <xsl:copy-of select="document(@href)/xsl:stylesheet/*" /></xsl:template>

Update: Just a note: the Chrome bug appears in Safari too.


You could do it in Python with the libxml2 and libxslt modules... not to do all your work for you, but starting with something like this:

import libxml2, libxsltstyledoc = libxml2.parseFile("page.xsl")style = libxslt.parseStylesheetDoc(styledoc)doc = libxml2.parseFile("somefile.xml")result = style.applyStylesheet(doc, None)

Then just serve the thing back out.


Try something like this in php:

<?php$sXml  = "<xml>";$sXml .= "<testtag>hello tester</testtag>";$sXml .= "</xml>";# LOAD XML FILE$XML = new DOMDocument();$XML->loadXML( $sXml );# START XSLT$xslt = new XSLTProcessor();$XSL = new DOMDocument();$XSL->load( 'xsl/index.xsl', LIBXML_NOCDATA);$xslt->importStylesheet( $XSL );#PRINTprint $xslt->transformToXML( $XML );?>