クライアント側のXSLT処理の問題を解決する

サーバーのテンプレートエンジンとして既にXSLTを使用しています。 次は、xsl変換をクライアントに転送します。 たとえば、 クライアントでの記事で説明されている方法を使用できます! XMLを入手してください! XSLを入手してください! XHTMLを作ろう! 3月! 。 ただし、XSLTを使用する場合、各ブラウザーはそのニュアンスの一部を追加するため、これは簡単すぎます。



xslおよびxmlファイルをダウンロードする方法とさまざまなブラウザーでの処理に関する質問については、上記の記事で説明しました。 他の問題を考慮してください:

1)包含;

2)キャッシング;



すべての例はこのページra-project.net/xsl_testsで公開されており、ブラウザOpera、Chrome、IE6、Firefox、Safariで動作します。



含む



シンプルなビュー命令

<xsl:include href="common/forms.xsl"/>





サーバー上のxsl変換の場合に正常に機能しますが、一部のブラウザーで解析されると正しく処理されません。 完全なURLが指定されている場合、すべてのブラウザーは追加のxslファイルをロードできます。 たとえば、これ:

<xsl:include href="http://site.com/xsl/common/forms.xsl"/>







ブラウザによってロードされるxslファイルでフルパスを指定することが可能です。 しかし、ソリューションの優雅さが失われます。 また、サイトがどのドメインでスピンオンするかを常に確実に把握しているわけではありません。 したがって、クライアントで変換を行う前に、javascriptを使用して相対パスを絶対パスに置き換える必要があります。



包含テストの例では、単一の包含が処理されます。 ここで、メインのxslファイル1.xslは追加のマークアップファイル1_1.xslをロードします。



二重包含テストの例では、 二重包含が処理されます。 ここで、メインのxsl-file 2.xsl2_1.xslをロードし、これは別のxsl-file 1_1.xslを順番に参照します。



キャッシング



Firefox、Chrome、Operaは、通常のメディアファイルと同様に、ダウンロードしたファイルをデフォルトでキャッシュします。 そのため、サイトページを更新すると、キャッシュの関連性が失われ、ファイルがネットワークから再びダウンロードされます。



それ以外の場合は、IEが行います。 このデータは(長い間)一度だけキャッシュされるため、ページを更新した後でも、ブラウザは以前にダウンロードしたファイルの関連性が失われないと確信できます。 データを更新する唯一のオプションは、ブラウザのキャッシュを手動でクリアすることです。



したがって、サイトに関連するデータをxmlの形式で表示する必要がある場合は、接尾辞を追加する必要があります。 そのように ra-project.net/xsl_tests/res/1.xml?_1234567890666



ra-project.net/xsl_tests/res/1.xml?_1234567890666



。 また、キャッシング自体はjavascriptで実装されています。 変換ファイルについても同じことが言えます。 たとえば、開発段階では、ブラウザーが常に「新鮮な」バージョンのxslファイルで動作するようにし、実稼働時にはブラウザーにこのxslファイルをキャッシュさせることもできます。



テストインクルージョン 」のでは、キャッシュ設定で「再生」できます。 設定の結果は、デバッグツール(Firebug、Dragonfly、Developer Tools)を使用して確認できます。



使用済みツール



クライアント側のxsl変換では、jQuery Transformプラグインを使用しました。これにより、キャッシュ機能が追加され、包含メカニズムが改善されました。 最終バージョンはra-project.net/xsl_tests/jquery.transform.jsから入手できます。



保留中の問題



考慮されていない質問がさらに2つありました。

1)ロードおよび変換エラー中のデバッグ。

2)Firefoxで命令disable-output-escaping = "yes"を処理する問題。

それらについてもう一度。



UPD。 この手法の実際の使用例。

juick.ra-project.net/stats#ra

以下は月ごとの投稿の統計です。 特定の月をクリックすると、その月のxmlデータとxslファイルがロードされます。 さらに、xslファイルは1回だけダウンロードされます。 また、xmlデータはキャッシュされるため、月のリストを「ウォークスルー」すると、ダウンロードしたデータはサーバーから再び取得されず、キャッシュから取得されます。



All Articles