呼び出されたスタイルシートに実際のパラメーター値を適用して、スタイルシートをインポートするにはどうすればよいですか? これがイラストです。
パラメータ「x」を取る汎用スタイルシートがあるとしましょう。こんな感じで、「general.xslt」にあります。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:param name="x" as="xs:string" />
... style-sheet content ...
</xsl:stylesheet>
インポートによって general.xslt の機能を組み込みたい高レベルのスタイル シート (specific.xslt) があります。この上位レベルのスタイル シート (specific.xslt) は、パラメーター "y" を取ります。より高いレベルのスタイルシートは、y の何らかの関数である実パラメータを仮パラメータ x に適用する general.xslt をインポートする必要があります。これが正当な XSLT 2.0 構文である場合、次のようになります。
より高いレベルのスタイルシート:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:param name="y" as="xs:string" />
<xsl:import href="general.xslt">
<xsl:with-param name="x" select="some-function($y)" />
</xsl:import>
<xsl:function name="some-function" as="xs:string">
<xsl:param name="value" as="xs:string" />
... content goes here ...
</xsl:function>
... more content ...
</xsl:stylesheet>
もちろん、上記は正当な構文ではありませんが、私が達成したいことを示しています。パラメーターを使用してテンプレートを呼び出すのと同様の方法で、実際のパラメーターを使用してスタイルシートを呼び出します。これは XSLT のどのバージョンでも可能ですか?
マイケル・ケイの答えのイラスト
general.xslt: この低レベルのスタイルシートはパラメーターを取ります。仮パラメータは x です。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0"
exclude-result-prefixes="xsl xs fn">
<xsl:param name="x" as="xs:string" />
<xsl:template match="/">
<root>
The value of x is <xsl:value-of select="$x" />
</root>
</xsl:template>
</xsl:stylesheet>
specific.xslt: この高レベル スタイル シートはパラメーターを取ります。仮パラメータは y です。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://my.com"
version="2.0"
exclude-result-prefixes="xsl xs fn my">
<xsl:import href="general.xslt" />
<xsl:param name="y" as="xs:string" />
<xsl:function name="my:some-function" as="xs:string">
<xsl:param name="value" as="xs:string" />
<xsl:value-of select="concat( $value, '!') " />
</xsl:function>
<xsl:variable name="x" select="my:some-function($y)" />
<xsl:template match="/">
<xsl:apply-imports/>
</xsl:template>
</xsl:stylesheet>
コマンド ラインでの Saxon の呼び出し:
Transform.exe -s:specific.xslt -xsl:specific.xslt -o:specific-out.xml y=abc
出力:
<?xml version="1.0" encoding="UTF-8"?><root>The value of x is abc!</root>
general.xslt の実際のパラメーターは「abc!」です。