背景:別のXSLT 2.0変換を実行するには、WebブラウザでXSLT 2.0を使用する必要があります。これは、XSLTプロセッサ用のテストドライバで使用されます。プロセッサ用のJavaScript APIを使用すると、リテラルコマンドオブジェクトを作成し、実行関数にパラメータとして渡して、変換を実行することができます。JavaScriptリテラルオブジェクトの作成 - XPath 2.0内
コマンドオブジェクトをビルドするのはJavaScriptからはかなり簡単ですが、XSLTからは、ユーザー定義のJavaScript関数を組み込んだJavaScript拡張を使用して、XSLTデータをJavaScriptオブジェクトに変換する必要があります。 XPath 2.0は一連の項目で動作するという問題がありますが、シーケンスのシーケンスは許可されていません。私は現在、変数を宣言し、次のXSLTのスニペットに示されている使用しているアプローチ、CMD:
同等のJavaScript
は、参考のために、以下に示します。var cmd= {
initialTemplate: initialTemplate,
stylesheet: stylesheet,
source: 'uk-maps.xml',
parameters: {
country: 'UK',
city: 'Cheltenham',
color: [28, 329, 767]
}
};
JavaScriptを渡すと、XSLTプロセッサはシーケンスをJavaScriptオブジェクトの配列に変換します。ユーザ定義のJavaScript関数js:objectは、配列を処理し、奇数項目のプロパティと対応する偶数項目のasignsプロパティ値を作成します。 js:object関数を再帰的に呼び出すと、新しいオブジェクトのプロパティにJavaScriptオブジェクトを割り当てることができます。私の他の回避策は、ユーザー定義のjs:array関数です。これは、JavaScriptオブジェクトにXPathシーケンスをラップし、シーケンスアイテムとして埋め込むことができます。 js:object関数は、これらのjs:arrayオブジェクトを検出して展開する必要があります。
質問:これはXSLT 2.0からJavaScriptリテラルオブジェクトを構築する方法の1つですが、すべての人に向いていない可能性のある回避策が必要です。他にどのような方法を使用できますか?おそらく、XMLをリテラルJavaScriptオブジェクトに変換する既存のJavaScriptライブラリ関数を使用する必要がありますか? XSLT 3.0のマップ(まだこのプロセッサでは利用できません)はより良い解決策を提供しますか?提案されているJSON/XSLT互換機能の進捗状況を教えてください。 js:objectとjs:arrayがプロセッサに組み込まれた拡張機能であれば良いでしょうか?ここで
この問題のAPIの仕様にこだわるしないでください - それはちょうどXSLTの一例として、前方に置かれました/ JSONの相互運用性 - 理想的ではない可能性があります。 – pgfearo
これはすべて純粋なXSLTで行うことができます - どうしてあなたは拡張機能を使うべきだと決めましたか? –
@Dimitre純粋なXSLTのリテラルオブジェクトである配列とプロパティ値を持つJavaScriptオブジェクトを作成するにはどうすればよいですか?あなたは簡単な例を挙げることができますか?何か明白なものがありませんか? – pgfearo