xsl: import e xsl: incluir em folhas de estilo não funcionam no Google Chrome

StackOverflow https://stackoverflow.com/questions/1620589

  •  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

Foi útil?

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.

  1. Substitua todos xsl:import com xsl:include (prioridade de importação não é aplicável a xsl:include, assim você pode precisar alterar o código e usar prioridades vez)
  2. Use a folha de estilo do lado do servidor abaixo para fundi-los em um antes de servir
  3. 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>.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top