xsl: import und xsl: include in Sheets funktionieren nicht auf Google Chrome
-
06-07-2019 - |
Frage
Ich baue eine Website, das XSL-Stylesheets verwendet, und ich bin eine kleine Bibliothek von nützlichen Funktionen in einem util Sheet, die anderen Blätter Aufbau importieren mit
<xsl:import href="util" />
an der Spitze von jedem Blatt. Das funktioniert nicht in Google Chrome, da es nicht xsl unterstützt: Import noch. Kann jemand schreiben Sie mir bitte ein Stylesheet, das ich auf der Server-Seite ausgeführt werden kann, der die xsl liest: Importzeile und importieren Sie die entsprechenden Sheet vor seiner gesendet an den Client
Lösung
Ich würde so etwas wie die folgenden tun, die den Stylesheet server kombinieren, bevor es zu Chrome bekommt. Der erste Schritt ist vorhanden, weil xsl:import
als Ersatz für alle Orte mit den importierten Stylesheets nicht das gleiche ist.
- Alle ersetzen
xsl:import
mitxsl:include
(Import Priorität nicht anwendbar istxsl:include
, so können Sie Ihren Code und die Verwendung Prioritäten statt ändern müssen) - Verwenden Sie die serverseitige Sheet unter ihnen in eine verschmelzen vor dem Servieren
- Warten Sie ein paar Wochen (kann Monate). Ich habe ein Update für Chrome erstellt und bin zur Arbeit mit dem Entwickler-Team des Update in die Build enthalten.
<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: Nur ein Hinweis:. Die Chrome Fehler erscheint in Safari zu
Andere Tipps
Sie könnte es in Python tun mit der libxml2 und libxslt Module ... nicht alle Ihrer Arbeit für Sie zu tun, aber mit so etwas wie dem Start-:
import libxml2, libxslt
styledoc = libxml2.parseFile("page.xsl")
style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseFile("somefile.xml")
result = style.applyStylesheet(doc, None)
Dann einfach die Sache dient wieder aus.
Versuchen Sie so etwas wie dies 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 );
#PRINT
print $xslt->transformToXML( $XML );
?>
http://www.w3.org/TR/xslt#literal -Ergebnis-Element zeigt, wie das Duplikat-xsl-Namespace-Problem zu lösen, wenn einen XSL-Stylesheet zu schreiben, die Ihren bestehenden XSL-Stylesheet in einen XSL-Stylesheet mit dem <xsl:import>
s erweitert transformiert.
Seien Sie vorsichtig, aber über den Unterschied zwischen <xsl:import>
und <xsl:include>
.