<xsl:param> 元素
宣告要在 <xsl:stylesheet> 項目或 <xsl:template> 項目中使用的具名參數。 允許預設值規格。
<xsl:param
name = QName
select = Expression
</xsl:param>
屬性
name
必要項。 指定參數的 限定名稱 (XSLT)。select
屬性的值為 Expressions (XSLT),而變數的值為評估運算式後所產生的物件。 指定這個屬性時,<xsl:param> 項目必須是空的。
項目資訊
備註
<xsl:param> 項目上的指定值是繫結的預設值。 叫用包含 <xsl:param> 的範本或樣式表時,會使用傳遞的參數以取代預設值。
必須將 <xsl:param> 項目宣告成 <xsl:template> 項目的直接子系。 若未宣告為直接子系,則不能存取 <xsl:param> 項目值,並且將發生錯誤。 例如:
<xsl:template name="getcount">
<xsl:element name="strong">
<xsl:param name="counted">
<xsl:value-of select="count(//book)"/>
</xsl:param>
Total Book Count: <xsl:value-of select="$counted"/>
</xsl:element>
</xsl:template>
在前一個範例中,<xsl:template> 項目是 <strong> 項目唯一的直接子系。 因此,剖析器無法正確評估 <xsl:param> 項目值,因而發生下列的錯誤:
注意事項 |
---|
不能在這裡使用關鍵字 xsl:param。 |
請正確放置這個項目,以便在 <xsl:template> 項目內容中評估該項目,並得到下列結果:
<xsl:template name="getcount">
<xsl:param name="counted">
<xsl:value-of select="count(//book)"/>
</xsl:param>
<xsl:element name="strong">
Total Book Count: <xsl:value-of select="$counted"/>
</xsl:element>
參數值可以是運算式能傳回的任何型別物件。 <xsl:param> 項目能以其他三種方式指定變數的值:
如果項目具有 select 屬性,則屬性的值必須是運算式,且參數值必須是評估運算式所得到的物件。 在此情況下,項目的內容必須是空白的。
若項目沒有 select 屬性,且具有非空白的內容 (例如一或多個子節點),則內容會指定一個值。 內容是具現化的範本,可提供參數值。 此值為結果樹狀結構片段,等同於一個節點集,而其中唯一所含的單一根節點,將範本具現化後所產生的節點序列當作子系。 結果樹狀結構片段中的節點之基本 URI 是項目的基本 URI。
若因範本具現化而建立的節點序列成員是屬性節點或命名空間節點,則會發生錯誤,因為根節點無法將屬性節點或命名空間節點當作子系。
如果內容是空的,並且沒有 select 屬性,參數值將是空字串。 因此
<xsl:param name="x"/>
相當於
<xsl:param name="x" select="''"/>
當您用參數來按照位置選取節點時,請務必不要執行下列動作:
<xsl:param name="n">2</xsl:param> ... <xsl:value-of select="item[$n]"/>
這會輸出第一個項目的值,因為變數 "n" 將繫結到結果樹狀結構片段,而非數字。 相反地,請執行
<xsl:param name="n" select="2"/> ... <xsl:value-of select="item[$n]"/>
或
<xsl:param name="n">2</xsl:param> ... <xsl:value-of select="item[number($n)]"/>
下列指令可將空節點集輕鬆指定為參數的預設值。 <xsl:param name="x" select="/.."/>
範例
這個範例可定義「編號區塊」的具名範本,並使其擁有能控制數字格式的引數。
XML 檔 (catmat.xml)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="paramelem.xsl"?>
<lists>
<ol>
<li>the</li>
<li>cat</li>
<ol>
<li>sat</li>
<li>on</li>
<li>the</li>
</ol>
<li>mat</li>
</ol>
</lists>
XSLT 檔 (paramelem.xsl)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="paramelem.xsl"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="ol/li">
<br/>
<xsl:call-template name="numbered-block"/>
</xsl:template>
<xsl:template match="ol//ol/li">
<br/>   
<xsl:call-template name="numbered-block">
<xsl:with-param name="format">a. </xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="numbered-block">
<xsl:param name="format">1. </xsl:param>
<fo:block>
<xsl:number format="{$format}"/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
輸出
此為格式化輸出:
1. the 2. cat a. sat b. on c. the 3. mat
以下是處理器輸出,為了清楚的目的,已加入泛空白字元。
<?xml version="1.0" encoding="UTF-16"?>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">1. the</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">2. cat</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">a. sat</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">b. on</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">c. the</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">3. mat</fo:block>