--- title: PIパラメータ slug: Web/XSLT/PI_Parameters tags: - XSLT translation_of: Web/XSLT/PI_Parameters ---
XSLT は実行時にパラメータをスタイルシートに渡すという概念をサポートしています。これによりしばらくの間は JavaScriptで XSLTProcessor を使用することが可能です。しかし、 <?xml-stylesheet?>
処理命令(PI)を使用するときは、パラメータを提供する方法がありませんでした。
これを解決するために2つの新しい PI 、つまり <?xslt-param?>
および <?xslt-param-namespace?>
が Firefox 2 (詳細については{{ Anch("Supported versions") }}を参照) で実装されています。どちらのPIにも、xml-stylesheet
PI と同じ方法で「擬似属性」を含めることができます。
次のドキュメントは "color" と "size" の2つのパラメータをスタイルシート "style.xsl" に渡します。
<?xslt-param name="color" value="blue"?> <?xslt-param name="size" select="2"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?>
これらの PI は JavaScript で XSLTProcessor
オブジェクトを使用して変換が行われても効果がありません。
xslt-param
および xslt-param-namespace
PIの属性は、xml-stylesheet で定義されている規則を使用して解析されます。認識できない属性はすべて無視する必要があります。属性の解析は、 xml-stylesheet
の構文に従う限り、認識できない属性が存在するせいで失敗してはなりません。
xslt-param
と xslt-param-namespace
PIの両方はドキュメントのプロローグ、つまり最初の要素タグの前になければなりません。プロローグ内のすべての PI は、xml-stylesheet
PIの前後に発生する必要があります。
複数の xml-stylesheet
PIがある場合、パラメータはすべてのスタイルシートに適用され、その結果すべてのスタイルシートがXSLT仕様に従って単一のスタイルシートにインポートされます。複数の xml-stylesheet
XSLT PI は現在 Firefox ではサポートされていません。
xslt-param
PI は 4つの属性をサポートしています。
name 属性がないか空の場合、PI は無視されます。
namespace 属性がないか空の場合、null 名前空間が使用されます。
スタイルシートに存在しない (またはスタイルシート内の変数である) パラメータ名を指定するのはエラーではありません。PI は単に無視されます。
value と select の両方が存在する場合、または value も select も存在しない場合、PI は無視されます。
value="..."
はアポストロフィと引用文字の両方を含むことができるので、厳密には select="'...'"
と等しくないことに注意してください。
パラメータ 'color' を文字列 'red' に設定します。
<?xslt-param name="color" value="red"?>
パラメータ 'columns' を2に設定します。
<?xslt-param name="columns" select="2"?>
パラメータ 'books' を null 名前空間のすべての <book>
要素を含むノードセットに設定します。
<?xslt-param name="books" select="//book"?>
パラメータ 'show-toc' を真偽値 true
に設定します。
<?xslt-param name="show-toc" select="true()"?>
次のコンテキストは、select 属性の式の解析と評価に使用されます。
xslt-param-namespace
PI によって決まります。以下を参照してくださいselect 属性が解析または実行に失敗した場合、PI は無視されます (特に、value 属性に戻ることはありません)。
xslt-param-namespace
は2つの属性を使用します。
xslt-param-namespace
PI は、それに続くすべての xslt-params のselect属性の式に影響します。 これは、xslt-param-namespaceとxslt-param PIの間にコメントや他のPIなどの他のノードがある場合でも適用されます。
複数の PI が同じプレフィックスを使用するのはエラーではなく、新しい PI はすべてプレフィックスがマップする名前空間を変更するだけです。
接頭辞がないか、空もしくは無効な NCName と等しい場合、PI は無視されます。
名前空間がない場合、PI は無視されます。名前空間が空の場合、接頭辞マッピングは削除されます。
パラメータ 'books' を 'http://www.example.org/myNamespace' 名前空間のすべての <book>
要素を含むノードセットに設定します。
<?xslt-param-namespace prefix="my" namespace="http://www.example.org/myNamespace"?>
<?xslt-param name="books" select="//my:book"?>
Firefox 2.0.0.1以降でサポートされています。value 属性は Firefox 2 ではサポートされていますが、2.0 リリースの一部の式では select 属性がクラッシュします。
式に XSLT 関数を許可する必要がありますか? document()
は役に立ちそうですが、generate-id()
が同じ文書に対して同じ文字列を生成しなければならない不変条件を維持するのは難しいようです。
XSLT スタイルシートで URL パラメータをクエリするとどうなりますか? 例えば、それらを指定された <xsl:param>に渡します。