スタイルシートのxsl:importおよびxsl:includeがGoogle Chromeで機能しない

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

  •  06-07-2019
  •  | 
  •  

質問

xslスタイルシートを使用するWebサイトを構築し、他のシートがインポートするutilスタイルシートに有用な関数の小さなライブラリを構築しています

<xsl:import href="util" />

すべてのシートの上部。これは、xsl:importをまだサポートしていないため、Google Chromeでは機能しません。 xsl:import行を読み取り、クライアントに送信する前に関連するスタイルシートをインポートするサーバー側で実行できるスタイルシートを誰かが私に書いてもらえますか?

役に立ちましたか?

解決

次のようなことを行います。これにより、Chromeに到達する前にスタイルシートサーバーサイドが結合されます。 xsl:importはすべての場所をインポートされたスタイルシートで置き換えることと同じではないため、最初の手順が実行されます。

  1. すべてのxsl:includeを<=>に置き換えます(インポートの優先順位は<=>には適用されないため、代わりにコードを変更し、優先順位を使用する必要があります)
  2. 以下のサーバー側スタイルシートを使用して、配信前にそれらをマージします
  3. 数週間待ちます(数ヶ月になる場合があります)。 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>と<=>の違いに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top