xsl: import e xsl: incluir em folhas de estilo não funcionam no Google Chrome
-
06-07-2019 - |
Pergunta
Eu estou construindo um site que folhas de estilo XSL usos, e eu estou construindo uma pequena biblioteca de funções úteis num util estilo que outras folhas importar com
<xsl:import href="util" />
no topo de cada folha. Isto não funciona no Google Chrome, como ele não suporta xsl: import ainda. Pode alguém por favor me escreva uma folha de estilo que eu possa executar no lado do servidor que irá ler o xsl:? Linha de importação e importar o estilo relevante antes de seu enviado para o cliente
Solução
Eu faria algo como o seguinte, que irá combinar a Serverside estilo, antes que chegue ao Chrome. O primeiro passo é no lugar, porque xsl:import
não é o mesmo como a substituição de todos os lugares com as folhas de estilo importados.
- Substitua todos
xsl:import
comxsl:include
(prioridade de importação não é aplicável axsl:include
, assim você pode precisar alterar o código e usar prioridades vez) - Use a folha de estilo do lado do servidor abaixo para fundi-los em um antes de servir
- Espere algumas semanas (pode ser de meses). Eu criei uma correção para Chrome e estou trabalhando atualmente com a equipe de desenvolvedores para incluir a correção para a compilação.
<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: Apenas uma nota:. O aparece bugs do Chrome no Safari também
Outras dicas
Você poderia fazê-lo em Python com os módulos libxml2 e libxslt ... não fazer todo o trabalho para você, mas começando com algo como isto:
import libxml2, libxslt
styledoc = libxml2.parseFile("page.xsl")
style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseFile("somefile.xml")
result = style.applyStylesheet(doc, None)
Em seguida, basta servir a coisa de volta.
Tente algo como isso em 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 );
#PRINT
print $xslt->transformToXML( $XML );
?>
http://www.w3.org/TR/xslt#literal -result elemento mostra como resolver o problema duplicado-xsl-namespace ao escrever uma folha de estilo XSL que transforma sua folha de estilo XSL existente em uma folha de estilo XSL com os <xsl:import>
s expandidas.
Tenha cuidado, porém, sobre a diferença entre <xsl:import>
e <xsl:include>
.