5


5

後でトランスフォームで使用するために動的な名前で動的に変数を作成したいのですが、そのためには動的にXSLを生成してから同じスクリプトで実行する必要があります。

これは私が探しているものの単なる大まかな疑似コードの例です。


XSLを使用してXSLを動的に構築し、後で同じスクリプトで実行することはできますか?

注:私たちのXMLは、CL XSL変換エンジンを実行するバッチプロセスを介して変換されます。そのため、XSL文書内のXSLスタイルシートを参照するだけでは選択肢はありません。

2 Answer


14


  • XSLTには、XSLT *自体である、出力の生成をサポートする特別な組み込み機能があります。

これは* `` * XSLTディレクティブです。

"


スタイルシートは xsl:namespace-alias`要素を使って、ある名前空間URIが別の名前空間URIの*別名*であることを宣言することができます。 リテラルネームスペースURIが別のネームスペースURIのエイリアスとして宣言されている場合、結果ツリーのネームスペースURIは、リテラルネームスペースURI自体ではなく、リテラルネームスペースURIがエイリアスであるネームスペースURIになります。 `xsl:namespace-alias`要素は stylesheet-prefix`属性で指定された接頭辞にバインドされた名前空間URIが result-prefix`属性で指定された接頭辞にバインドされた名前空間URIのエイリアスであることを宣言します。 したがって、 `stylesheet-prefix`属性はスタイルシートに現れる名前空間URIを指定し、 result-prefix`属性は結果ツリーに現れる対応する名前空間URIを指定します。 "

*これは xsl:variable`を含む xsl:stylesheet`を生成する変換の小さな例です。*これは望みの方法で構築されています:


この変換が次のXML文書に適用されると、

myValue

必要な結果が生成されます。

    myValue

*次のステップは、この「スクリプト」でこの動的に生成されたXSLT変換を起動することです。


1


純粋なXSLT(1.0または2.0)では、現時点では望んでいることは不可能です。

http://www.saxonica.com/[*Saxon 9.x XSLTプロセッサ*]を使用している場合は、これを実装する拡張機能がいくつかあります。http://www.saxonica.com/documentation/extensions /functions/compile-stylesheet.html[*saxon:compile-stylesheet()*]および http://www.saxonica.com/[*saxon:transform()*]。

問題の解決に本当にそのような機能が必要になることはめったにありません。問題を説明すると、XSLTスタイルシートを動的に作成して実行することなく、問題を解決する最善の方法が見つかる可能性があります。