スタイルシートのxsl:importおよびxsl:includeがGoogle Chromeで機能しない
-
06-07-2019 - |
質問
xslスタイルシートを使用するWebサイトを構築し、他のシートがインポートするutilスタイルシートに有用な関数の小さなライブラリを構築しています
<xsl:import href="util" />
すべてのシートの上部。これは、xsl:importをまだサポートしていないため、Google Chromeでは機能しません。 xsl:import行を読み取り、クライアントに送信する前に関連するスタイルシートをインポートするサーバー側で実行できるスタイルシートを誰かが私に書いてもらえますか?
解決
次のようなことを行います。これにより、Chromeに到達する前にスタイルシートサーバーサイドが結合されます。 xsl:import
はすべての場所をインポートされたスタイルシートで置き換えることと同じではないため、最初の手順が実行されます。
- すべての
xsl:include
を<=>に置き換えます(インポートの優先順位は<=>には適用されないため、代わりにコードを変更し、優先順位を使用する必要があります) - 以下のサーバー側スタイルシートを使用して、配信前にそれらをマージします
- 数週間待ちます(数ヶ月になる場合があります)。 Chromeの修正プログラムを作成しました。現在、開発チームと協力してビルドに修正プログラムを含めています。
<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>
更新:注:ChromeのバグはSafariにも表示されます。
他のヒント
Pythonでlibxml2およびlibxsltモジュールを使用して実行できます。すべての作業を自動で行うのではなく、次のようなものから開始します。
import libxml2, libxslt
styledoc = libxml2.parseFile("page.xsl")
style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseFile("somefile.xml")
result = style.applyStylesheet(doc, None)
その後、そのサービスを提供します。
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-element は、既存のXSLスタイルシートを<xsl:import>
sが展開されたXSLスタイルシートに変換するXSLスタイルシートを記述するときのduplicate-xsl-namespaceの問題を解決する方法を示します。
ただし、<xsl:include>
と<=>の違いに注意してください。
所属していません StackOverflow