0

呼び出されたスタイルシートに実際のパラメーター値を適用して、スタイルシートをインポートするにはどうすればよいですか? これがイラストです。

パラメータ「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!」です。

4

1 に答える 1

1

xsl:paramをxsl:paramまたはxsl:variableでオーバーライドできます(トップレベルに表示されます。つまり、インポートモジュールのxsl:stylesheetの子です)。

<xsl:variable name="x" select="some-function($y)" />
于 2012-05-17T10:17:19.407 に答える