PI 引數
概述
XSLT 支援在執行樣式表時將引數傳遞給樣式表的概念。 使用 JavaScript 中的 XSLTProcessor 時,這樣做已經有一段時間了。 但是,當使用 <?xml-stylesheet?> 處理指令 (PI) 時,以前沒有辦法提供引數。
為了解決這個問題,在 Firefox 2 中實現了兩個新的 PI(有關詳細資訊,請參見下面的 支援的版本),<?xslt-param?> 和 <?xslt-param-namespace?>。 兩個 PI 都可以包含“偽屬性”,就像 xml-stylesheet PI 一樣。
以下文件將兩個引數“color”和“size”傳遞給樣式表“style.xsl”。
<?xslt-param name="color" value="blue"?>
<?xslt-param name="size" select="2"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
請注意,當使用 JavaScript 中的 XSLTProcessor 物件進行轉換時,這些 PI 不會有任何影響。
處理指令
xslt-param 和 xslt-param-namespace PI 中的屬性使用 xml-stylesheet 中定義的規則進行解析。 任何無法識別的屬性都必須被忽略。 只要該屬性遵循 xml-stylesheet 中的語法,解析任何屬性都不應因存在無法識別的屬性而失敗。
xslt-param 和 xslt-param-namespace PI 必須出現在文件的前言中,即第一個元素標籤之前。 前言中的所有 PI 都必須得到遵守,包括出現在任何 xml-stylesheet PI 之前和之後的 PI。
如果存在多個 xml-stylesheet PI,則引數將應用於所有樣式表,這是因為所有樣式表都根據 XSLT 規範匯入到一個樣式表中。reference? 請注意,Firefox 目前不支援多個 xml-stylesheet XSLT PI。
xslt-param
xslt-param PI 支援 4 個屬性
name-
name
引數名稱的區域性名稱部分。 屬性不會進行語法檢查,但是如果它不是有效的 NCName,則它將永遠不會匹配樣式表中的任何引數。-
namespace
引數名稱的名稱空間。 屬性不會進行語法檢查。-
value
包含引數的字串值。 屬性的值用作引數的值。 資料型別將始終為 string。-
select
引數的 XPath 表示式。 屬性的值將解析為 XPath 表示式。 評估表示式的結果用作引數的值。
如果 name 屬性缺失或為空,則忽略 PI。
如果 namespace 屬性缺失或為空,則使用空名稱空間。
指定樣式表中不存在的引數名稱(或樣式表中的變數)不是錯誤。 PI 將被忽略。
如果 value 和 select 同時存在,或者 value 和 select 都不存在,則忽略 PI。
請注意,value="..." 不完全等於 select="'...'",因為值可以同時包含撇號和引號字元。
示例
<?xslt-param name="color" value="red"?>
將引數“color”設定為字串“red”
<?xslt-param name="columns" select="2"?>
將引數“columns”設定為數字 2
<?xslt-param name="books" select="//book"?>
將引數“books”設定為包含空名稱空間中所有 <book> 元素的節點集
<?xslt-param name="show-toc" select="true()"?>
將引數“show-toc”設定為布林值 true
select 屬性上下文
- 以下上下文用於解析和評估 select 屬性中的表示式。
- 上下文節點是執行樣式表時用作初始當前節點的節點。
- 上下文位置是在執行樣式表時用作初始當前節點列表的上下文節點的位置。
- 上下文大小是在執行樣式表時用作初始當前節點列表的大小。
- 沒有可用的變數。
- 函式庫是標準 XPath 函式庫。
名稱空間宣告由 xslt-param-namespace PI 確定,見下文。
如果 select 屬性無法解析或執行,則忽略 PI(特別是,它不會回退到 value 屬性)。
xslt-param-namespace
xslt-param-namespace使用兩個屬性-
prefix
- 引數名稱的區域性名稱部分。 屬性不會進行語法檢查,但是如果它不是有效的 NCName,則它將永遠不會匹配樣式表中的任何引數。
-
要對映的字首。
namespace
字首對映到的名稱空間。
xslt-param-namespace PI 會影響 select 屬性中所有 xslt-param 的表示式,這些 xslt-param 緊隨 PI 之後。 這即使在 xslt-param-namespace 和 xslt-param PI 之間存在其他節點(如註釋或其他 PI)的情況下也是如此。
多個 PI 使用相同的字首不是錯誤,每個新的 PI 只是更改字首對映到的名稱空間。
請注意,value="..." 不完全等於 select="'...'",因為值可以同時包含撇號和引號字元。
如果 prefix 缺失、為空或等於無效的 NCName,則忽略 PI。
<?xslt-param-namespace prefix="my" namespace="http://www.example.org/myNamespace"?>
<?xslt-param name="books" select="//my:book"?>
如果 namespace 缺失,則忽略 PI。 如果 namespace 為空,則刪除字首對映。
將引數“books”設定為包含 http://www.example.org/myNamespace 名稱空間中所有 <book> 元素的節點集
支援的版本
從 Firefox 2.0.0.1 開始支援。 value 屬性在 Firefox 2 中受支援,但在 2.0 版本中,select 屬性對於某些表示式會導致崩潰。
可能的未來發展